面板失去焦点,滚动条无法滚动

时间:2016-06-28 14:12:35

标签: c# winforms events focus panel

我有一个主面板,其中包括10个儿童面板。我想要的是,当我的光标进入父面板时,滚动条可以从鼠标滚动滚动。

我通过在鼠标进入时添加ParentPanel.Focus()来完成此操作。一切都很好,直到我看到当我的光标离开文本框所在的子面板时,我的子面板中的文本框无法使用(我无法输入)。为了解决这个错误,我评论了ParentPanel.Focus()并且文本框工作正常。但是,我再也无法滚动。有解决方法吗?

1 个答案:

答案 0 :(得分:1)

Panels并不擅长Focus

这个小帮助函数捕获了所有PageUp的{​​{1}}和PageDown个键,并使它们滚动到外部TextBoxes

Panel

您可以在设置中调用一次,如下所示:

void hookUpTextBoxesIn(Control ctl, ScrollableControl sCtl)
{
    foreach( Control c in ctl.Controls)
    {
        if (c.Controls.Count > 0) hookUpTextBoxesIn(c, sCtl);
        if (c is TextBox)
        {
            c.PreviewKeyDown += (s, e) =>
                {
                    if (e.KeyData == Keys.PageDown) sCtl.AutoScrollPosition =
                        new Point(sCtl.AutoScrollPosition.X, 
                                 -sCtl.AutoScrollPosition.Y + 10);
                    if (e.KeyData == Keys.PageUp) sCtl.AutoScrollPosition =
                        new Point(sCtl.AutoScrollPosition.X,
                                 -sCtl.AutoScrollPosition.Y - 10);
                };
        }
    }
}

hookUpTextBoxesIn(ParentPanel, ParentPanel); 你可以写:

MouseEnter

如果您愿意,可以更改滚动量。我编码并测试它仅用于垂直滚动。您可能希望将其扩展为其他键或高级组合键。