避免在 TabControl 中滚动到顶部

本文关键字:滚动 顶部 TabControl | 更新日期: 2023-09-27 18:31:03

我有一个TabControlAutoScroll设置为在标签页上true。选项卡页包含一个RichTextBox,其高度大于页面,因此垂直滚动条出现在TabPage上。如果我向下滚动页面,然后单击RichTextBox,页面会滚动回顶部。关于如何防止此类行为的任何想法?

UPD:这是一个可以重现该问题的示例项目。当RichTextBox收到焦点时,会出现此问题。例如,向下滚动选项卡页面 1,然后选择选项卡页面 2,返回选项卡页面 1 并单击RichTextBox

避免在 TabControl 中滚动到顶部

好吧,经过一番挣扎,我终于在这里找到了解决方案。我所要做的就是创建从TabPage继承的我自己的类并覆盖 ScrollToControl 方法,使其返回DisplayRectangle.Location

发生这种情况是因为一旦您选择了 richTextBox 并且它"看不见",它就会转到当前位置(在您的情况下不可见或在顶部)。如果先选择富文本框,然后滚动,则可以避免这种情况。执行此操作的一种方法是在应用程序启动时Select() richTextBox。

添加这个:

private void Form1_Load(object sender, EventArgs e)
        {
            richTextBox1.Select();
        }

编辑:

您还可以在 TabIndexChanged 上添加 Select(),因为如果您更改 Tabs,该行为将再次发生。

答案虽然正确,但如果不看到代码,我很难最初理解。也许这有助于其他人。

public class CustomTabPage : System.Windows.Forms.TabPage
{
    protected override System.Drawing.Point ScrollToControl(System.Windows.Forms.Control activeControl)
    {
        //return base.ScrollToControl(activeControl);
        return activeControl.DisplayRectangle.Location;
    }
}

定义自定义 Tabpage 类后,现在使用 TabControl 从窗体中的此类继承。

private CustomTabPage tpJobSetup;

我遇到了和你一样的问题。我通过将选项卡面板的自动滚动边距属性设置为 0 解决了这个问题。这样,页面就不会滚动到顶部。