Probleme textbox

Résolu/Fermé
vincent - 9 sept. 2013 à 11:20
 vincent - 9 sept. 2013 à 16:14
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

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
9 sept. 2013 à 14:03
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
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
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
9 sept. 2013 à 15:17
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
ah oui exact... et du coup comment je pourrais faire ? je vois pas trop la...
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
9 sept. 2013 à 15:35
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
je viens de tester et il n'y a pas de difference
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
9 sept. 2013 à 15:50
Tu l'as testée en mettant un point d'arrêt pour voir ce qui se passe?
0