面板失去焦点,滚动条无法滚动
本文关键字:滚动 滚动条 失去 焦点 | 更新日期: 2023-09-27 17:52:55
我有一个主面板,其中包括10个子面板。我希望当光标进入父面板时滚动条总是可以从鼠标滚动栏中滚动。
我通过在鼠标进入时添加ParentPanel.Focus()来实现这一点。一切都工作得很好,直到我看到当我的光标离开文本框所在的子面板时,这个子面板中的文本框无法使用(我无法在其中键入)。为了解决这个错误,我注释了ParentPanel.Focus(),文本框工作得很好。但是我还是不能滚动。有解决这个问题的方法吗?
Panels
并不擅长拥有Focus
。
这个小的辅助函数捕获所有TextBoxes
的PageUp
和PageDown
键,并使它们滚动外部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
中你可以写:
if (!(ActiveControl is TextBox)) textBox1.Focus();
如果你喜欢,可以改变滚动量。我编码和测试它的垂直滚动只。您可能希望将其扩展为其他键或高级键组合。