Probleme textbox

Résolu
vincent -  
 vincent -
Bonjour,

j'ai un textbox multiligne ou je voudrais ecrire seulement 3 lignes.
Le probleme c'est que lorsque j'appuie sur entree sa passe quand meme a la ligne suivante.

Je voudrais en gros annuler l'effet de la touche entree et positionner le curseur sur la 3eme ligne la ou l'utilisateur s'est arrété d''écrire

Pour l'instant j'ai ça :

Dim NbLignes_Commentaires As String
NbLignes_Commentaires = UBound(Split(TextCommentaire.Text, vbCrLf))

If (NbLignes_Commentaires > 2) Then

End If

j'ai essayé avec selectionStart pour repositionner le curseur mais sans succes...

merci de vos réponses

2 réponses

  1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 772
     
    Bonjour,

    Le code suivant est en VBA.

    Les contrôles TextBox ont une propriété LineCount qui retourne ... le nombre de lignes.
    Tu veux, que l'utilisateur ne puisse pas saisir de 4ème ligne. Il faut donc lui dire, si le LineCount est supérieur à 3 alors supprime le derniers caractère saisi.
    ça se traduit par :
    Private Sub userForm_Initialize()
    With TextBox1
    .MultiLine = True
    .EnterKeyBehavior = True
    End With
    End Sub

    Private Sub TextBox1_Change()
    If TextBox1.LineCount > 3 Then
    TextBox1.Text = Left(TextBox1.Text, Len(TextBox1.Text) - 2)
    End If
    End Sub
    0
  2. vincent
     
    merci de ta reponse pijaku,

    alors j'ai reussi ce que je voulais faire avec le code suivant :



    Dim NbLignes_Commentaires As String = TextCommentaire.Lines.Length
    Dim Taille As Integer = TextCommentaire.TextLength

    If (NbLignes_Commentaires > 3) Then

    MsgBox(" You can not write more than 3 lines of comments")

    TextCommentaire.Text = TextCommentaire.Text.Remove(Taille - 1)
    TextCommentaire.SelectionStart = Taille

    End If

    par contre il me sort un caractere ascii !!! je ne sais pas d'ou il vient

    en gros il me fait bien le travail mais il le fait en 2 temps, il passe 2 fois dans la boucle et je ne sais pas trop pourquoi !
    0
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 772
       
      il passe 2 fois dans la boucle et je ne sais pas trop pourquoi

      Si tu as placé ton code dans l'événement Change de ton textbox, c'est normal qu'il le fasse deux fois.
      1ère fois lorsque tu dépasses 3 lignes
      2ème lorsqu'il effectue la correction (TextCommentaire.Text.Remove(Taille - 1)). Ben oui, ton textbox change à nouveau...
      0
    2. vincent
       
      ah oui exact... et du coup comment je pourrais faire ? je vois pas trop la...
      0
    3. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 772
       
      Une possibilité est de placer une variable boolean publique comme ceci :

      'Haut du module
      Public Test As Boolean


      Private Sub TextBox1_Change()
      Dim NbLignes_Commentaires As String = TextCommentaire.Lines.Length
      Dim Taille As Integer = TextCommentaire.TextLength

      If Test = True Then Test = False: Exit Sub
      If (NbLignes_Commentaires > 3) Then
      MsgBox(" You can not write more than 3 lines of comments")
      TextCommentaire.Text = TextCommentaire.Text.Remove(Taille - 1)
      TextCommentaire.SelectionStart = Taille
      Test = True
      End If
      0
    4. vincent
       
      je viens de tester et il n'y a pas de difference
      0
    5. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 772
       
      Tu l'as testée en mettant un point d'arrêt pour voir ce qui se passe?
      0