[Clos] RichTextBox curseur

Fermé
cs_dayvid Messages postés 212 Date d'inscription mardi 18 janvier 2011 Statut Membre Dernière intervention 12 février 2013 - 11 févr. 2013 à 15:05
 cptpingu - 13 févr. 2013 à 12:54
Bonjour,

Ayant pas trouvé se que je cherchais, je voudrais vous demander:

Je voudrais que quand il se passe quelque chose dans le RichTextBox, que la position
du curseur soit renseigné dans ma barre de statue

Comment renvoyer / changer la position (En X et Y, en caractère et colonne) du curseur dans le RichTextBox
C'est tout pour le moment, le reste viendra après.

49 réponses

cs_dayvid Messages postés 212 Date d'inscription mardi 18 janvier 2011 Statut Membre Dernière intervention 12 février 2013 1
12 févr. 2013 à 10:19
Bonjour,

J'ai chercher encore et trouver ceci mais impossible de l'utiliser
http://msdn.microsoft.com/fr-fr/library/system.windows.controls.richtextbox.caretposition.aspx


Moi j'en revient toujours pas se qu'il faut faire tout ça pour avoir la position
du caret dans ste foutue RichTextBox

Se doit être ailleurs alors, je finirais bien par trouver !

Bonjour Zermelo

Merci de l'aide que vous m'apporter (ainsi que les autres bien entendu)
est du français franchement douteux.

Pardonner mon innocence mais que voulez vous dire par là ?!

Autre chose. Vous est-il parfois venu à l'esprit que la lecture des grands auteurs pourrait vous être très utile ?

Excusez-moi ?
Que voulez-vous dire aussi par là ?!

Encore merci, Cordialement.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
12 févr. 2013 à 10:51
Dis-moi, dayvid : c'est quand, maintenant, que tu vas corriger ce que je t'ai dit de corriger ?
Rappel : une correction de déclaration et une correction de passage (absent pour l'instant) de paramètre !
C'est désespérant.
Car : après correction, le code marchera parfaitement, hein ...


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
cs_dayvid Messages postés 212 Date d'inscription mardi 18 janvier 2011 Statut Membre Dernière intervention 12 février 2013 1
12 févr. 2013 à 11:01
Excuse-moi Ucfoutu mais...
Je vais voir cella merci.

J'ai trouver comment renvoyer le numéro de ligne:
RichTextBox1.GetLineFromCharIndex(RichTextBox1.SelectionStart()).ToString
0
Bonjour.

J'essayais seulement de vous suggérer, avec ménagement, que votre expression écrite est truffée de fautes d'orthographe, de grammaire, et de style, ce qui la rend difficilement lisible, et qu'il existe des moyens d'améliorer cela. Mais comme vous avez insisté, ma réponse ne pouvait être que brutale.

Désolé.



Étant illettré, je signe d'une croix : ×
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_dayvid Messages postés 212 Date d'inscription mardi 18 janvier 2011 Statut Membre Dernière intervention 12 février 2013 1
12 févr. 2013 à 11:34
Re bonjour Zermelo

Je vous remercie de votre attention et je ne vous en veux pas le moins du monde car c'est dit gentiment...
Sinon...

Pour la ligne donc une fois corrigé, cella donne ceci:
ToolStripStatusLabel1.Text = "Ligne: " & (RichTextBox1.GetLineFromCharIndex(RichTextBox1.SelectionStart()) + 1).ToString


Il ne me reste plus qu'a trouver la position en caractère du caret.
0
cs_dayvid Messages postés 212 Date d'inscription mardi 18 janvier 2011 Statut Membre Dernière intervention 12 février 2013 1
12 févr. 2013 à 11:50
Bon j'ai essayé de corriger mais ça marche pas encore:
Private Const EM_LINEINDEX As Long = &HBB
    Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Integer) As Long

    Function GetRowCaret(ByRef oRtb As RichTextBox) As Long
        Return oRtb.GetLineFromCharIndex(oRtb.SelectionStart) + 1
    End Function

    Function GetColCaret(ByRef oRtb As RichTextBox) As Long
        Return oRtb.SelectionStart - SendMessage(CLng(oRtb.Handle), EM_LINEINDEX, GetRowCaret(oRtb) - 1, 0)
    End Function

Bref, les Api, ya moyen de faire sans.
0
Utilisateur anonyme
12 févr. 2013 à 11:54
Bonjour,

Et comme le précise msdn ici, et après avoir importé les références nécéssaires à ton projet (propriétés du projet):
- PresentationFramework
- PresentationCore

Des propriétés supplémentaires pour ton RichTextBox apparaîtront et tu pourras alors récupérer facilement la position du caret :
Dim tp As TextPointer = MonRichTextBox.CaretPosition
0
Très bien, cela vous donne le rang de la ligne dans laquelle se trouve le point d'insertion, autrement dit votre Y.
Eh bien maintenant partez donc à la chasse au X (je ne parle pas du boson).


Bon courage.

Étant illettré, je signe d'une croix : ×
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
12 févr. 2013 à 12:02
Bon j'ai essayé de corriger mais ça marche pas encore:

Tu n'as toujours pas corrigé les typages, dont (mais pas uniquement) celui de SendMessage et de ses paramètres.
Et c'est bien dommage !
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
cs_dayvid Messages postés 212 Date d'inscription mardi 18 janvier 2011 Statut Membre Dernière intervention 12 février 2013 1
12 févr. 2013 à 17:59

banana32

Membre Club
1768 msg
1796 msg CS

Bonjour,

Et comme le précise msdn ici, et après avoir importé les références nécéssaires à ton projet (propriétés du projet):
- PresentationFramework
- PresentationCore

Des propriétés supplémentaires pour ton RichTextBox apparaîtront et tu pourras alors récupérer facilement la position du caret :
Code Visual Basic :

Dim tp As TextPointer = MonRichTextBox.CaretPosition

Et bien même avec ça, ça ne marche pas !!!
La preuve:

Imports System.Windows.Documents

Public Class Form1

    Dim tp As TextPointer = RichTextBox1.CaretPosition

    ' ToolStripStatusLabel1.Text = RichTextBox1.GetPositionFromCharIndex(RichTextBox1.SelectionStart).ToString
    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load

    End Sub

    Private Sub PositionCurseurBarStatue()

        ' Numéro de ligne ou se trouve le curseur
        ToolStripStatusLabel1.Text = "Ligne: " & (RichTextBox1.GetLineFromCharIndex(RichTextBox1.SelectionStart()) + 1).ToString

    End Sub

    Private Sub RichTextBox1_SelectionChanged(sender As System.Object, e As System.EventArgs) Handles RichTextBox1.SelectionChanged
        PositionCurseurBarStatue()
    End Sub

End Class
0
Utilisateur anonyme
12 févr. 2013 à 18:21
On place cette ligne dans l'événement TextChanged de ton composant.
0
cs_dayvid Messages postés 212 Date d'inscription mardi 18 janvier 2011 Statut Membre Dernière intervention 12 février 2013 1
12 févr. 2013 à 20:05
Merde, jme suis planter sur la réponse accepter !
Bon, personne ne va donc m'aider donc se sujet ne se terminera jamais
0
Utilisateur anonyme
12 févr. 2013 à 20:10
Si, tu peux annuler en pressant le bouton à nouveau.

Après, pour ton code, comme tu l'as dit à une autre personne :
Ensuite, je te laisse un peut chercher...
0
cs_dayvid Messages postés 212 Date d'inscription mardi 18 janvier 2011 Statut Membre Dernière intervention 12 février 2013 1
12 févr. 2013 à 20:44
Merci Banana32 !
Mais là je ne fais QUE chercher et je ne trouve pas
J'en est marre moi
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
12 févr. 2013 à 20:46
J'en est marre moi

Bon ...

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
Utilisateur anonyme
12 févr. 2013 à 21:03
Bonjour,

RÉFLÉCHIS UNE SECONDE,

 Dim tp As TextPointer = RichTextBox1.CaretPosition


La position de ton caret est retournée dans un type TEXTPOINTER. Donc c'est un utilisant le TEXTPOINTER ainsi obtenu que tu vas parvenir à tes fins. Mais comme tu ne vas pas lire ce que ton aide dit au sujet de TEXTPOINTER tu vas continuer à brailler. Alors que j'avais dit hier que tu devrais étudier TEXTPOINTER dans ton aide, tu as continué de brailler. C'est tellement pathétique que c'est drôle. J'imagine tous ceux se marrent en te lisant.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
12 févr. 2013 à 21:10
Bonjour, cmarcotte,
Laisse ! Il nous l'a dit clairement : il en a marre !
Quand on en a marre, on en a marre.
Ainsi, par exemple, lorsque j'en ai eu marre de "boire la tasse" en essayant de faire su ski nautique, j'ai arrêté tout net d'en faire.

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
Utilisateur anonyme
12 févr. 2013 à 21:49
Bonjour,

Suivant ainsi le conseil de ucfoutu, que je salue au passage, voici donc le dernier coup sur le clou.

Si, en te rendant sur le site de Microsoft, tu avais pris le temps de jeter un oeil sur lapropriété selection du RichtTextBox, tu aurais pu (dû) lire les deux petites phrases suivantes:

La valeur par défaut TextSelection retournée présente une propriété IsEmpty avec la valeur True.Une TextSelection vide est restituée sous la forme d'un signe insertion dans l'espace de texte sans aucune sélection.


Donc, quand rien n'est sélectionné, ta sélection c'est le caret. Donc, la recherche de la position du caret devient superflue, puisque tu peux la fixer. Regarde la méthode select dans ton aide. CQFD

C'est la même chose en VBA pour Word, sauf que dans Word, selection eat à la fois une propriété et un objet.
0
Utilisateur anonyme
12 févr. 2013 à 22:06
Bonsoir cmarcotte,

la recherche de la position du caret devient superflue, puisque tu peux la fixer

Là, pour le coup c'est moi qui n'ai rien compris...
0
Utilisateur anonyme
12 févr. 2013 à 22:58
Bonjour,

Là, pour le coup c'est moi qui n'ai rien compris...


En fait je présume qu'il veut connaître la position du caret pour faire une opération quelconque. S'il ne connaît pas la position exacte de son caret, il peut le déplacer à l'endroit où il veut. Son caret est un objet TextRange qui a une méthode Select. Il peut utiliser la méthode select, pour "sélectionner" un caractère de longueur nulle, et son caret va suivre obligatoirement la selection; parce que, sauf horreur de ma part, il ne peut y avoir qu'un seul point d'insertion, et un seul caret, dans un (Rich)TextBox. Et même que, tant qu'il n'est pas déplacé d'une façon ou d'une autre, il est par défaut le premier caractère après le dernier caractère du texte. Donc, en résumé, s'il veut être sur que son caret est à la bonne place, il n'a qu'à le déplacer. S'il est déjà au bon endroit, il ne bougera pas, sinon, il devrait se retrouver à la bonne place. Mais, encore là, il va être pris avec un TextPointer. Au pire il peut utiliser un PointF() pour trouver sa position sur l'écran et s'ajuster en fonction de la position de son contrôle.

Dans cet exemple de Microsoft, ils utilisent la classe Drawing2D, pour appliquer des effets à du texte. Ils sont même capables de donner la longueur du texte en fonction de la taille de la police utilisée.
0
Rejoignez-nous