Combobox numérique, longueur limite

Soyez le premier à donner votre avis sur cette source.

Snippet vu 8 197 fois - Téléchargée 88 fois

Contenu du snippet

il s'agit d'utiliser des combo en affichage de numériques (cadrés à droite) et une longueur maximum : en fait la même chose que le TextBox !!
mais bon j'en avais besoin en combo...

Source / Exemple :


' A.Loiseau
'
' Module: déclarer la constante 
'de taille limite du ComboBox
' déclarer l'API 

Public Const CB_LIMITTEXT = &H141

Public Declare Function SendMessageLong _
Lib "user32" Alias "SendMessageA" ( _
ByVal hwnd As Long, _
ByVal wMsg As Long, _
ByVal wParam As Long, _
ByVal lParam As Long) As Long

'
' Form: ComboBox en Style 1 (simple combo)
'       Pour donner au ComboBox les mêmes
'       caractéristiques que le TextBox en
'       propriétés:
'       TextBox.alignemt=1 (right justify)
'       TextBox.maxlength=Un nombre (ici 7)
'
' A l'appel de l'API on ajoute 1 à la taille maxi
' dans MaxLen, car le Format$ met des espaces
' à gauche, comptant comme caractères alors
' le ComboText serait toujours rempli !

Dim CBStartSel As Integer
Dim CBLenSel As Integer
Dim CBtext As String

Private Sub Combo1_GotFocus(Index As Integer)
Combo1(Index).SelStart = Combo1(Index).Tag
End Sub

Sub Form_Load()
Dim MaxLen As Integer

' combo en groupe de contrôles

Combo1(0).Font = "FixedSys"
Combo1(1).Font = "FixedSys"

MaxLen = 7
Call SendMessageLong(Combo1(0).hwnd, CB_LIMITTEXT, MaxLen + 1, ByVal 0&)
' longueur d'entrées possible dans le Combo:
Combo1(0).Tag = MaxLen
Combo1(0).Text = String(MaxLen, " ")
label1 = MaxLen

MaxLen = 4
Call SendMessageLong(Combo1(1).hwnd, CB_LIMITTEXT, MaxLen + 1, ByVal 0&)
' longueur d'entrées possible dans le Combo:
Combo1(1).Tag = MaxLen
Combo1(1).Text = String(MaxLen, " ")
label2 = MaxLen
End Sub

Private Sub Combo1_Change(Index As Integer)
Dim Taille As Integer
Dim Arobase As String
' zone ComboBox numérique
Taille = Len(Trim$(Combo1(Index)))
Arobase = String(Combo1(Index).Tag, "@")
If Taille > Combo1(Index).Tag Then Combo1(Index) = CBtext: Beep ': Exit Sub
Combo1(Index).Text = Format$(Right$(Combo1(Index).Text, Combo1(Index).Tag), Arobase)
Combo1(Index).SelStart = CBStartSel + CBLenSel
End Sub

Private Sub Combo1_KeyDown(Index As Integer, KeyCode As Integer, Shift As Integer)
CBtext = Combo1(Index).Text
CBStartSel = Combo1(Index).SelStart
CBLenSel = Combo1(Index).SelLength
End Sub

A voir également

Ajouter un commentaire

Commentaire

-
Belle source mais un peu compliqué pour moi.
J'avais un problème semblable et je l'ai résolu comme ceci

Private Sub combo1_KeyPress(KeyAscii As Integer)If Len(Trim(combo1.Text)) >5 And KeyAscii <> 8 Then KeyAscii 0 'limite le box à 5 chars et moins. Si l'on entre plus, on efface.
end sub

j'en ai aussi profité pour contrôler les caractères permis dans le box.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.