-1
votes

Comment puis-je obtenir un numéro de ligne cliqué dans la zone de texte?

J'ai une zone de texte avec Multiline activée. Comment puis-je obtenir un numéro de ligne cliqué dans textbox.click?


0 commentaires

3 Réponses :


2
votes

La classe TeintboxBase (à partir de laquelle la zone de texte dérive) a de nombreuses méthodes pouvant vous aider dans cette tâche.

suppose que vous avez ce gestionnaire d'événements pour l'événement MOUSEDOWN de votre commande TextBox1 Contrôle P>

Sub TextBox1_MouseDown(sender as Object, e as MouseEventArgs) Handles TextBox1.MouseDown

    '  In the MouseEventArgs we have the click location
    '  We can use that point to get the CharIndex from the TextBox
    Dim charIndex as Integer = TextBox1.GetCharIndexFromPosition(e.Location)

    ' Now the charIndex could be passed to another method to get the line index
    Dim line As Integer = TextBox1.GetLineFromCharIndex(charIndex)

    ' Lines start from 0
    MessageBox.Show("Click on line=" + line + ", Text=" + TextBox1.Lines(line))
End Sub


0 commentaires

0
votes

Une solution est la détermination de la hauteur de la ligne de texte, de telle sorte:

Dim LineHeight = 16 ' you may change this value

Private Sub richTextBox1_MouseClick(sender As Object, e As MouseEventArgs)

  'the number of the selected line
  Dim i = e.Location.Y/LineHeight

  'get the value of the number line.
  MessageBox.Show(Me.richTextBox1.Lines(i))
End Sub


0 commentaires

0
votes

Steve a une grande réponse qui m'a appris quelques petites choses, mais comme il a utilisé MouseDown au lieu de cliquez sur Je pensais que je pouvais donner une autre option et d'élargir la différence entre les deux un peu.

Je vais vous montrer Mon code au cas où vous voulez tout ce que vous voulez, mais si vous voulez un peu plus d'informations, vous pouvez lire sur. p>

Le code (à l'aide d'un clic à la demande): p>

Private Sub mainTextBox_MouseClick(sender As Object, e As MouseEventArgs) Handles mainTextBox.MouseClick
    Dim line As Integer = mainTextBox.GetLineFromCharIndex(mainTextBox.SelectionStart)
End Sub

Private Sub mainTextBox_MouseDown(sender As Object, e As MouseEventArgs) Handles mainTextBox.MouseDown
    Dim line As Integer = mainTextBox.GetLineFromCharIndex(mainTextBox.SelectionStart)
End Sub


8 commentaires

Wow. Je ne prévoyais pas d'écrire cela beaucoup, mais comme j'ai commencé, j'ai réalisé que je pouvais apprendre quelques nouvelles choses aussi et commencer à tester certaines choses et à avoir un peu emporté. :) (Lire: Si quelqu'un se sent comme si on peut gaillir ceci à quelque chose de plus concis sans changer la réponse de base, allez-y)


Si quelqu'un veut modifier ce c # dans VB, je serais très reconnaissant comme vous le souhaitez :-) C'est une conversion assez simple - la plus grande différence consiste à câbler les gestionnaires d'événements à l'aide des poignées / Code> Mot clé.


@Intexx merci! J'ai littéralement jamais écrit une seule ligne de VB, donc je n'étais pas sûr de ce que tout cela impliquait. En regardant la réponse de Steve, je pensais à essayer de la conversion moi-même et à regarder ce que vous avez changé, je pense que j'aurais été assez proche! Je pense que la seule chose que j'aurais manquée était Byval. Quoi qu'il en soit, merci encore. Je suppose que vous pourriez dire que j'ai appris un VB aujourd'hui. :-)


BYVAL En fait, c'était un "oups" de ma part. BYVAL est déduit par défaut et n'est plus requis. Le convertisseur de Telerik l'insère automatiquement et j'ai oublié de le sortir, c'est tout. Je suppose que vous pourriez dire que j'ai appris de VB aujourd'hui Bon homme :-)


Beau wagon de puissance que vous avez là :-)


@Intexx avait malheureusement. J'ai aimé cette chose. :-) C'était ma première voiture et je l'ai couru jusqu'à ce qu'elle soit morte (avait un feu de moteur -> le corrigé mais j'ai oublié d'ajouter plus d'eau au radiateur -> Moteur saisi ...). Il est venu avec ce travail de peinture. XD C'était un wagon de 1978 Subaru 4wd. (Cher modérateur: Je sais que ce commentaire est hors sujet, s'il vous plaît, attendez que Intexx le voie avant de le retirer. Merci ;-))


@Intexx ah, alors j'aurais eu raison. Frais. Heureux que tu l'as fait pour moi, alors je pouvais être sûr.


@Intexx merci pour l'offre, mais je ne sais pas comment l'utiliser parce que je ne l'utilise pas. ;) Si jamais je le faisais, je vais essayer de me souvenir de votre offre. Merci encore. :)