我在Windows窗体中编写了一个自定义控件。我动态创建一个垂直滚动条并捕获其值的变化。
目前,滚动条是唯一可以获取焦点的控件,因此我的控件充当面板:它将焦点转移到滚动条。当用户使用滚动条时,所有其他键盘事件都会转移到它,而不是控制本身。
我希望完全禁用滚动条的焦点,并在控件本身中实现适当的行为(例如,Page up,page down,home,end等)。我发现了一个名为“CanFocus”的属性,但不幸的是它是只读的。
如何禁用滚动条的聚焦能力?我知道,我可以实现Focus事件并手动将焦点转移到控件,但也许WF库中有一个现成的解决方案?
答案 0 :(得分:0)
感谢ŁukaszO。的帮助。
解决方案:
public class MyVScrollBar : VScrollBar
{
public MyVScrollBar()
{
SetStyle(ControlStyles.Selectable, false);
}
}
public partial class UserControl1 : UserControl
{
protected override void OnKeyDown(KeyEventArgs e)
{
MessageBox.Show("KeyDown: " + e.KeyCode.ToString());
base.OnKeyDown(e);
}
protected override bool IsInputKey(Keys keyData)
{
if (keyData == Keys.Up || keyData == Keys.Down || keyData == Keys.Left || keyData == Keys.Right)
return true;
else
return base.IsInputKey(keyData);
}
public UserControl1()
{
SetStyle(ControlStyles.Selectable, true);
InitializeComponent();
}
}