У Стива отличный ответ, который научил меня нескольким вещам, но, поскольку он использовал MouseDown вместо Click, я подумал, что могу дать другой вариант и немного расширить разницу между ними.
I 'Я покажу вам мой код в случае, если это все, что вы хотите, но если вы хотите немного больше информации, то вы можете прочитать дальше.
Код (используя Click как запрошено):
Private Sub mainTextBox_Click(sender As Object, e As EventArgs) Handles mainTextBox.Click
Dim line As Integer = mainTextBox.GetLineFromCharIndex(mainTextBox.SelectionStart)
End Sub
Получает местоположение курсора выделения, который перемещается туда, куда вы щелкаете, вместо местоположения мыши.Так как это событие щелчка находится на самом TextBox, курсор должен перемещаться каждый раз, и поэтому он должен быть относительно эквивалентным ответу Стива с использованием местоположения мыши, но я не проверил его полностью, чтобы быть уверенным во всехкрайние случаи (да, курсор выбора перемещается до вызова события click, я так много тестировал).
О, и не забывайте, что он дает индекс строки, поэтому первая строкафактически возвращает 0, второе возвращает 1 и т. д.
Дополнительные биты:
Поскольку Стив использовал MouseDown, я подумал упомянуть, как он отличается от Click / MouseClick весли вы (или какой-то будущий читатель) не знаете.MouseDown вызывается, как только нажимается кнопка мыши, затем MouseUp вызывается при ее отпускании, а затем вызываются Click / MouseClick.Если точное время не имеет значения для вашего использования, тогда вам будет хорошо, если вы захотите, если это имеет значение, есть несколько хороших ответов, которые объясняют различия более подробно (вот тот, который объясняет Нажмите против MouseClick , например).
Здесь вы также можете увидеть, как можно проделать тот же трюк с MouseClick и MouseDown:
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
Мне удалось сделатьбыстрое тестирование, так как у меня есть TextBox в чем-то, над чем я сейчас работаю, но я не тестировал ни метод Стива, ни свой собственный, и не могу сказать, определенно один из них лучше другого.Вы можете попробовать оба варианта и посмотреть, что лучше для вас.