winforms 检查插入符号在屏幕视图上是否可见

yvfmudvl  于 2023-01-05  发布在  其他
关注(0)|答案(2)|浏览(187)

我一直在思考如何检查插入符号是否在一个Richtextbox的当前屏幕视图中可见。问题是插入符号可能在Richtextbox的末尾,而滚动是在框的开头,我如何通过编程知道插入符号是否在当前屏幕视图中可见。注意:插入符号可能不一定在底部。

zpjtge22

zpjtge221#

假设这是WinForms
我认为您可以使用RichTextBox1.GetPositionFromCharIndex()RichTextBox1.SelectionStart

' Y pos of caret
Dim CaretYPos As Integer = RichTextBox1.GetPositionFromCharIndex(RichTextBox1.SelectionStart).Y
Dim CharHeight As Integer = 4 ' Height of each line

If CaretYPos >= RichTextBox1.Height - CharHeight Then
    ' Caret is hidden below screen view
ElseIf CaretYPos < -CharHeight Then
    ' Caret is hidden above screen view
Else
    ' Caret is visible
End If

不过,在使用CharHeight时,您可能需要考虑更高的dpi显示器

bvuwiixz

bvuwiixz2#

我将@jimi的注解应用到我的C#应用程序中,它与ScrollToCaret()方法配合使用效果很好。谢谢。

private void CheckAndMakeSelectionVisible()
{
    // other stuff
    if(!IsCaretVisible()) {
        richTextMsg.ScrollToCaret();
    }
}
private bool IsCaretVisible()
{
    if (!richTextMsg.ClientRectangle.Contains(richTextMsg.GetPositionFromCharIndex(richTextMsg.SelectionStart)))
    {
        // Outside visible bounds 
        return false;
    }
    else
        return true;
}

相关问题