Comment bloquer un textbox a 10 lignes.

DoZer1911 Messages postés 1 Date d'inscription mardi 17 août 2004 Statut Membre Dernière intervention 10 septembre 2004 - 10 sept. 2004 à 22:47
cs_liquide Messages postés 1016 Date d'inscription samedi 22 mars 2003 Statut Membre Dernière intervention 24 juin 2008 - 11 sept. 2004 à 23:42
Je cherche à bloquer un textbox à 10 lignes.
En fait en continuant à taper le texte les ligne du haut s'efface
Je cherche à a eliminer le probleme.

Merci

4 réponses

Oeil_de_taupe Messages postés 150 Date d'inscription samedi 31 janvier 2004 Statut Membre Dernière intervention 16 février 2009
10 sept. 2004 à 23:24
VOici le code,

j'ai fait long mais je crois qu'il marche

J'ai utilisé une textbox nommée text1, ce qu'il faudrait pas (plutot txtMessage suivant les conventions)


''l'option de la textbox "multiline" doit etre mis a TRUE

''Le nb de ligne qu'accepte le programme
Const nblignemax = 5
''Le compteur qui contient le nb de retour à la ligne dans la textboxe
Private compteur As Integer

''Evenement quand l'utilisateur appuye sur un touche dans la textbox
Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)

    ''si l'utilisateur a tapper un Backspace et il a deja tappé 5 ligne    If KeyCode 13 And compteur 5 Then
    
        ''Le programme n'accepte pas
        MsgBox "Vous avez atteint le maximum de ligne"
        ''Le prog supprime le enter fait avec un envoi de touche (senkeys)
        ''Le code backspace c'est la touche supprimer sur un clavier
        SendKeys "{backspace}"
        
    Else
        
        ''remise du compteur à zéro avant de compter tous les enter dans le texte
        compteur = 0

        ''la boucle for parcoure tout le texte
        For i = 1 To Len(Text1.Text)
        
            ''et ajoute 1 au compteur si il trouve un retour à la ligne
            If (Mid(Text1.Text, i, 1) = Chr(10)) Then
                
                compteur = compteur + 1
            
            End If
        
        Next i
        
    End If
    
End Sub



La taupe voit toujours tout
0
Oeil_de_taupe Messages postés 150 Date d'inscription samedi 31 janvier 2004 Statut Membre Dernière intervention 16 février 2009
10 sept. 2004 à 23:24
dsl j'ai mal indenté, c'est le site qui a enlever l'indentation...

La taupe voit toujours tout
0
pcpunch Messages postés 1243 Date d'inscription mardi 7 mai 2002 Statut Membre Dernière intervention 18 février 2019 5
11 sept. 2004 à 01:51
Effectivement le code de Oeil_de_taupe est valable, mais en plus court il y a aussi : (dans l'evenement keypress de ton textbox)

Private Sub Text1_KeyPress(KeyAscii As Integer)
Dim Nbl As Integer, Pos As Integer, Pos2 As Integer
If InStr(Text1, vbCrLf) <> 0 Then    Pos InStr(Text1, vbCrLf): Nbl 1
        Do While Pos <> 0
        Nbl = Nbl + 1
        Pos2 = Pos
        Pos = InStr(Pos2 + 1, Text1, vbCrLf)
        Loop
End IfIf Nbl 5 And KeyAscii 13 Then KeyAscii = 0
End Sub

La ligne : If Nbl 5 And KeyAscii 13 Then KeyAscii = 0

permet de bloquer a 5 lgine le texbox( si 10 alors : fi nbl=10....)

voila ++
0
cs_liquide Messages postés 1016 Date d'inscription samedi 22 mars 2003 Statut Membre Dernière intervention 24 juin 2008
11 sept. 2004 à 23:42
salut,
je suis en train de me dire que si il n'y a pas de vbcrlf, ca ne fonctionne pas, non ?
Tout dépend de ce que souhaite DoZer1911, peut être que les codes précédents lui convienne, mais une text box peut retourner a la ligne sans la touche "enter", dans ce cas il ne comptabilise pas les vbcrlf, par contre si il doit compter strictement les lignes sans distinction de code, je ne suis pas sur que ca passe.

pour cela j'ai une autre solution mais je fatigue alors elle ne me plait pas trop mais pas le courage de chercher plus loin les détails.
l'api sendmessage pour compter les lignes. il ne cherche pas a comprendre si il y a tel ou tel caracteres.

Option Explicit
Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByRef lParam As Any) As Long
Private Const EM_GETLINECOUNT As Long = &HBA

Private Sub Text1_KeyUp(KeyCode As Integer, Shift As Integer)
If SendMessage(Text1.hwnd, EM_GETLINECOUNT, 0&, 0&) = 11 Then
    Text1.Text = Mid$(Text1.Text, 1, Len(Text1.Text) - 1)
    Text1.SelStart = Len(Text1.Text)
End If
End Sub

c'est certain que l'effet, au moment du calcul, est moche ... mais bon ca passe. Puis c'est sur qu'il doit y avoir de meilleurs solutions

Bonne prog, poele_a_frire@hotmail.com
liquide
0
Rejoignez-nous