我有一个主面板,其中包括10个儿童面板。我想要的是,当我的光标进入父面板时,滚动条可以从鼠标滚动滚动。
我通过在鼠标进入时添加ParentPanel.Focus()来完成此操作。一切都很好,直到我看到当我的光标离开文本框所在的子面板时,我的子面板中的文本框无法使用(我无法输入)。为了解决这个错误,我评论了ParentPanel.Focus()并且文本框工作正常。但是,我再也无法滚动。有解决方法吗?
答案 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
如果您愿意,可以更改滚动量。我编码并测试它仅用于垂直滚动。您可能希望将其扩展为其他键或高级组合键。