在自定义控件中禁用滚动条的焦点

时间:2012-11-28 11:56:55

标签: c# winforms focus scrollbar

我在Windows窗体中编写了一个自定义控件。我动态创建一个垂直滚动条并捕获其值的变化。

目前,滚动条是唯一可以获取焦点的控件,因此我的控件充当面板:它将焦点转移到滚动条。当用户使用滚动条时,所有其他键盘事件都会转移到它,而不是控制本身。

我希望完全禁用滚动条的焦点,并在控件本身中实现适当的行为(例如,Page up,page down,home,end等)。我发现了一个名为“CanFocus”的属性,但不幸的是它是只读的。

如何禁用滚动条的聚焦能力?我知道,我可以实现Focus事件并手动将焦点转移到控件,但也许WF库中有一个现成的解决方案?

1 个答案:

答案 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();
    }

}