Limiter le nombre de lignes dans un textbox

Contenu du snippet

J'utilise une API pour compter le nombre de lignes.
Il y a plusieurs problématiques :
Si une lettre est ajoutée, le code ne s'execute qu'après l'ajout. Mais on ne peut pas supprimer la dernière lettre du texte car l'utilisateur n'était pas forcément à cette position.
Il faut donc jouer avec SelStart.

Source / Exemple :


' Appel à l'API et déclarations
Private 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

Private Const EM_NOMBRELIGNE = &HBA

' Si l'ajout de texte fait dépasser les 4 lignes, on supprime les caractères en trop.
Private Sub Textbox1_Change()
    If (SendMessageLong(Textbox1.hWnd, EM_NOMBRELIGNE, 0&, 0&) > 4) Then
        If Textbox1.SelStart > 0 Then
            Textbox1.SelStart = Textbox1.SelStart - 1
            Textbox1.SelLength = 1
            Textbox1.SelText = ""
        End If
    End If
End Sub

' Si l'utilisateur fait un retour chariot alors qu'il y a 4 lignes, un caractère spécial apparait, ce code l'évite.
Private Sub Textbox1_KeyPress(KeyAscii As Integer)
    If (SendMessageLong(Textbox1.hwnd, EM_NOMBRELIGNE, 0&, 0&) = 4) And (KeyAscii = 10 Or KeyAscii = 13) Then
        KeyAscii = 0
    End If
End Sub

A voir également

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.