【问题标题】:How to select a line in a RichTextBox on a mouse click?如何通过鼠标单击在 RichTextBox 中选择一行?
【发布时间】:2015-07-29 19:23:36
【问题描述】:

我的用户界面中有一个只读的 RichTextBox。我想这样做,以便当我用鼠标单击一行文本时,它会选择或突出显示整行。只是被点击的那一行。

你是怎么做到的?

【问题讨论】:

    标签: vb.net richtextbox


    【解决方案1】:

    RichTextBox 有你需要的所有方法,你只需要多个。首先您需要将鼠标位置映射到字符索引:

    Private Sub RichTextBox1_MouseDown(ByVal sender As Object, ByVal e As MouseEventArgs)
        Dim box = DirectCast(sender, RichTextBox)
        Dim index = box.GetCharIndexFromPosition(e.Location)
    

    那么你需要将字符索引映射到一行:

        Dim line = box.GetLineFromCharIndex(index)
    

    那么你需要找出行的开始位置:

        Dim lineStart = box.GetFirstCharIndexFromLine(line)
    

    然后你需要找出它的结束位置,也就是下一行的开始减一:

        Dim lineEnd = box.GetFirstCharIndexFromLine(line + 1) - 1
    

    然后你需要做出选择:

        box.SelectionStart = lineStart
        box.SelectionLength = lineEnd - lineStart
    

    总结:

    Private Sub RichTextBox1_MouseDown(ByVal sender As Object, ByVal e As MouseEventArgs) Handles RichTextBox1.MouseDown
        Dim box = DirectCast(sender, RichTextBox)
        Dim index = box.GetCharIndexFromPosition(e.Location)
        Dim line = box.GetLineFromCharIndex(index)
        Dim lineStart = box.GetFirstCharIndexFromLine(line)
        Dim lineEnd = box.GetFirstCharIndexFromLine(line + 1) - 1
        box.SelectionStart = lineStart
        box.SelectionLength = lineEnd - lineStart
    End Sub
    

    【讨论】:

    • 如果选择文本框中的最后一行会导致错误,因为 lineEnd 为 -2
    【解决方案2】:

    只需在点击事件处理程序中使用以下代码

    SendKeys.Send("{HOME}+{END}")
    

    【讨论】:

    • 我不想全选,我只想突出显示我点击的那一行。
    猜你喜欢
    • 2012-12-16
    • 2012-08-01
    • 2012-07-08
    • 1970-01-01
    • 2012-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多