0

我在标签页上有一个TabControl设置AutoScrolltrue。标签页包含 a RichTextBox,它的高度比页面大,因此垂直滚动条出现在 a 上TabPage。如果我向下滚动页面然后单击RichTextBox,页面将滚动回顶部。关于如何防止这种行为的任何想法?

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

4

3 回答 3

2

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

于 2013-09-23T11:06:29.820 回答
1

发生这种情况的原因是,一旦您选择了richTextBox 并且它“看不见”,它就会进入当前位置(在您的情况下,该位置不可见或位于顶部)。如果您先选择richTextBox 然后滚动您将避免这种情况。一种方法是Select()在应用程序启动时使用richTextBox。

添加这个:

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

编辑:

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

于 2013-09-11T09:48:32.137 回答
1

如果没有看到代码,我最初很难理解正确的答案。也许这对其他人有帮助。

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;
    }
}

定义自定义标签页类后,现在使用 TabControl 从表单中的此类继承。

private CustomTabPage tpJobSetup;
于 2013-10-03T12:52:04.607 回答