避免在 TabControl 中滚动到顶部
本文关键字:滚动 顶部 TabControl | 更新日期: 2023-09-27 18:31:03
我有一个TabControl
,AutoScroll
设置为在标签页上true
。选项卡页包含一个RichTextBox
,其高度大于页面,因此垂直滚动条出现在TabPage
上。如果我向下滚动页面,然后单击RichTextBox
,页面会滚动回顶部。关于如何防止此类行为的任何想法?
UPD:这是一个可以重现该问题的示例项目。当RichTextBox
收到焦点时,会出现此问题。例如,向下滚动选项卡页面 1,然后选择选项卡页面 2,返回选项卡页面 1 并单击RichTextBox
。
好吧,经过一番挣扎,我终于在这里找到了解决方案。我所要做的就是创建从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 解决了这个问题。这样,页面就不会滚动到顶部。