winforms 避免在TabControl中滚动到顶部

ddarikpa  于 2023-05-18  发布在  其他
关注(0)|答案(4)|浏览(187)

我有一个TabControlAutoScroll在tabpages上设置为true。标签页包含一个RichTextBox,它的高度大于页面,因此垂直滚动条出现在TabPage上。如果我向下滚动页面,然后点击RichTextBox,页面会滚动回到顶部。有什么办法防止这种行为吗?
UPD:Here是一个示例项目,可以重现该问题。RichTextBox接收焦点时出现问题。例如,向下滚动tabPage1,然后选择tabPage2,返回tabPage1并单击RichTextBox

ddrv8njm

ddrv8njm1#

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

kzipqqlq

kzipqqlq2#

发生这种情况是因为一旦您选择richTextBox,并且它“不在视线范围内”,它将转到当前位置(在您的情况下,该位置不可见或位于顶部)。如果您先选择richTextBox,然后滚动,您将避免这种情况。一种方法是在应用程序启动时Select() richTextBox。
加上这个:

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

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

2wnc66cl

2wnc66cl3#

答案虽然正确,但在没有看到代码的情况下,我很难理解。也许这对其他人有帮助。

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

pwuypxnk4#

我和你遇到了同样的问题。我通过将tabPanel的AutoScrollMargin属性设置为0解决了这个问题。这样页面就不会滚动到顶部。

相关问题