Je ne vois pas de bug dans votre exemple.
Xojo m’indique 6 lignes avec le texte par défaut et une ligne si je remplace le texte par un seul caractère, ce qui est correct.
Vous êtes au courant que le nombre de lignes affichées n’est pas forcément le nombre de retours à la ligne, n’est-ce-pas? (par exemple, si votre fenêtre fait 50 pixels de large, “Ceci est un texte sans retour à la ligne mais long quand même” sera affiché en plusieurs lignes).
Le bug est ailleurs, dans votre code.
TextArea1.text.Length ne compte pas les accents (et autres caractères spéciaux) comme vous le pensez.
Utilisez TextArea1.text.Bytes à la place.
En refaisant le test comme tu l’expliques “test” + validé 3x puis des caractères, il y a effectivement un comportement bizarre : Le nombre de ligne augmente quand on tape les caractères alors qu’à ce moment là le nombre de lignes n’augmente pas…
C’est ce que j’ai fait. Le seul décalage que j’obtiens, et, je suis d’accord avec vous sur le fait que c’est un bug, est que le comptage est correct à partir du deuxième caractère d’une ligne. Avec “Bytes”:
“Test de texte
Deuxième ligne
A|”
(| est le curseur)
J’obtiens 2, qui est faux.
“Test de texte
Deuxième ligne
As|”
J’obtiens 3.
Même en ajoutant 1 au paramètre pour LineNumber, je n’obtiens jamais 3 pour le premier exemple.
Mais avec “Length” au lieu de “Bytes”, c’est pire:
“Test de texte
Deuxième ligne
A|”
=2
“Test de texte
Deuxième ligne
As|”
=2
“Test de texte
Deuxième ligne
Asd|”
=3
Chaque accent va décaler le caractère nécessaire pour que le résultat soit correct.
pour l’instant j’ai signalé deux fois un bug, et les deux tickets ce sont soldé par une correction de bug et mis en fixé et vérifié… la version de Xojo actuel a bien été corrigé… j’espère que ça ce passera de la même manière pour ce bug, car j’ai vraiment besoin que ce soit corrigé… je ne vois pas trop comment je pourrait contourner ce bug vous avez une idée ?
Vous pourriez ajouter 1 au comptage des lignes si la dernière ligne ne contient qu’un seul caractère.
Ceci semble fonctionner, dans mes tests non exhaustifs:
Var Txt As String=TextArea1.Text 'Éviter de répéter le même appel
Var Char As String=Txt.Middle(Txt.Bytes-2,1) 'Avant-dernier caractère
Label5.text = "Nb Ligne(s):" + str(TextArea1.LineNumber(Txt.Bytes) + 1+if(Char=EndOfLine,1,0))
bon c’est plus logique que la normal… mais c’est dommage qu’il ne compte pas une ligne de plus quand on fait un retour a la fin du texte sans pour autant y taper un caractère…
mais bon merci ça dépanne bien…
juste une chose la ou est placé le “if” ça je ne connaissait pas et d’ailleurs j’arrive pas trop à comprendre comment ça marche, si vous avez le temps une petite explication sera la bienvenue
je fait deux retours, et au troisième il compte une ligne…
sur cette troisième je tape un caractère il compte une ligne de plus
je tape un deuxième caractère il compte encore une ligne de plus
je tape de nouveau un troisième caractère et ce toujours sur la même ligne et là il n’en compte pas une de plus, mais il y a bien le nombre de ligne exacte…
faut bien avoué que c’est un comportement bizarre, non ?