fred_gaou
Messages postés8Date d'inscriptionlundi 5 décembre 2005StatutMembreDernière intervention18 novembre 2008
-
2 nov. 2008 à 17:46
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 2018
-
2 nov. 2008 à 22:24
Bonjour,
SVP éclairez-moi, un débutant perdu !
Soit une form1 avec deux TextBox (sous Microsoft Visual Basic 6)
Ce code
'###################################################################################################'
'Fonction "SelectionTextBox" : Sélection du texte entier quand focus sur une TexteBox'
'###################################################################################################'
Public Sub SelectionTextBox(LeControl As Object)
On Error GoTo ErrorHandler
Dim LongueurTexte As Long
'###################################################################################################'
'Activer "SelectionTextBox"
'###################################################################################################'
Private Sub Text1_GotFocus()
SelectionTextBox Text1
End Sub
Private Sub Text2_GotFocus()
SelectionTextBox Text2
End Sub
et celui-ci
'saisie numérique seule autorisée'
Private Sub Text1_KeyPress(KeyAscii As Integer)
Select Case KeyAscii
Case 46, 44
If InStr(Text1.Text, ",") > 0 Or InStr(Text1.Text, ".") > 0 Then KeyAscii = 0
Case Else
If Not Chr(KeyAscii) Like "[0-9,.]" And KeyAscii <> Asc(vbBack) Then KeyAscii = 0
End Select
End Sub
Fonctionnent correctement.
Je me suis inspiré du premier pour utiliser le second sous cette forme, Code à faire fonctionner :
'###################################################################################################'
'Fonction "Numerique" : saisie numérique seule autorisée'
'###################################################################################################'
Public Sub Numerique(ByVal KeyAscii As Integer)
On Error GoTo ErrorHandler
Select Case KeyAscii
Case 46, 44
If InStr(TxtBox.Text, ",") > 0 Or InStr(TxtBox.Text, ".") > 0 Then KeyAscii = 0
Case Else
If Not Chr(KeyAscii) Like "[0-9,.]" And KeyAscii <> Asc(vbBack) Then KeyAscii = 0
End Select
ErrorHandler:
Exit Sub
End Sub
'###################################################################################################'
'Activer "Numerique"
'###################################################################################################'
Private Sub Text1_KeyPress(KeyAscii As Integer)
Numerique Text1, KeyAscii
KeyAscii = 0
End Sub
Private Sub Text2_KeyPress(KeyAscii As Integer)
Numerique Text2, KeyAscii
KeyAscii = 0
End Sub
Evidemment, manquant de connaissances en programmation et en VB en particulier, cet empirisme n'a aboutit qu'à l'échec.
Pourriez-vous corriger ce dernier code avec les explications détaillées si nécéssaires.
De plus, je voudrais savoir comment serait-il possible de limiter au maximum le copier-coller pour programmer tous les TextBox en même temps ou ceux désignés. Au lieu d'avoir:
Private Sub Text1_KeyPress(KeyAscii As Integer)
Numerique Text1, KeyAscii
KeyAscii = 0
End Sub
et être obliger de copier-coller en modifier le "nom", avoir un truc du genre
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 2 nov. 2008 à 18:10
Ouais ...
1) Et si tu nous disais plutôt le but à atteindre (ta finalité)...==+>> ce sera plus simple pour t'aider que de lire un code où l'on voit que, quoi que l'on frappe ... on ne frappe rien !
2) une question à la fois, s'il te plait ===>> donc on en est à la première.
Const ES_NUMBER As Long = &H2000&
Const
GWL_STYLE As Long = -16
Private Declare Function GetWindowLong Lib
"user32.dll" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long)
As Long
Private Declare Function SetWindowLong Lib "user32.dll" Alias
"SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As
Long) As Long
Private Function SetTextBoxNum(ByRef Obj As Object) As
Boolean
SetWindowLong Obj.hwnd, GWL_STYLE, GetWindowLong(Obj.hwnd,
GWL_STYLE) Or ES_NUMBER
End Function
' ==== Utilisation :
'Private
Sub Form_Load()
' Call SetTextBoxNum(Text1)
'End Sub
++
<hr size="2" width="100%" />
Prenez un instant pour répondre à [forum/sujet-SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
fred_gaou
Messages postés8Date d'inscriptionlundi 5 décembre 2005StatutMembreDernière intervention18 novembre 2008 2 nov. 2008 à 22:13
En gros, je voudrais comprendre comment programmer une fonction que je puisse appliquer facilement au type de contrôle "textbox". Car je ne souhaite pas copier-coller le même code de plusieurs dizaines de lignes dans chaque contrôle textbox dont l'évenemment serait par exemple "keypress"
Le premier code que j'ai mis plus haut résout cette problèmatique. Le code de PCPT est très bien aussi dans le concept (mais il n'accepte pas la saisi des "." ou "," une seule fois comme séparateur décimal).
Donc admettons que sur ce modèle ou un autre je puisse améliorer ces fonctions pour que les contrôles du type textbox réagisse ainsi:
- saisie de chiffres seulement
- accepter la saisi de "." ou "," une seule fois comme séparateur décimal
- interdire la saisi après deux chiffres après la virgule
- limiter le nombre de caractères pouvant être saisis
- formater le contenu tel que "#,##0.00" (séparateur millier, quoi) quand focus out
- sélection du texte entier et format normal (sans séparateur millier, quoi) quand focus in
J'ai bien trouvé des codes qui réalisent certaines propriétés mais dès que j'essaye de les réunir, ça coince.
Conclusion, j'aimerais bien pouvoir appliquer toutes ces propriétés en une ou deux fonctions (voir trois max) tel que exemple:
Private Sub Form_Load()
Call FonctionOne(Text1)
Call FontionTwo(Text1)
Call FonctionOne(Text2)
Call FontionTwo(Text2)
End Sub
'etc.
Ou bien
Private Sub Text1_GotFocus()
FonctionOne Text1
End Sub
Private Sub Text1_PressKey()
FonctionTwo Text1
End Sub
Private Sub Text2_GotFocus()
FonctionOne Text2
End Sub
Private Sub Text2_PressKey()
FonctionTwo Text2
End Sub
Voir plus simple si vous avez.
J'espère avoir été plus clair car je manque du vocabulaire spécifique pour m'exprimer, "NooB" oblige.
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 2 nov. 2008 à 22:24
salut,
ce que tu veux "que çà fasse" (j'aurais voulu écrire "faire" mais je commence à me poser la question....) est évidemment réalisable.
et pour limiter la redondance, 2 cas de figures :
*(conseillé) : faire un joli module de classe, propre et organisé, et attacher tes contrôles à une nouvelle instance...
*utiliser un "MaskEdit", et jouer avec le masque.....
le désir d'une textbox numérique n'étant pas révolutionnaire,
tu trouveras dans les sources existantes plusieurs exemples pour arriver à tes fins
ps : d'après ce que tu décris, un test au _keydown avec LIKE, puis un format$ sur le _validate seraient amplement suffisants
<hr size="2" width="100%" />
Prenez un instant pour répondre à [forum/sujet-SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp