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

C# 禁用自定义控件中滚动条的焦点,c#,winforms,focus,scrollbar,C#,Winforms,Focus,Scrollbar,我在Windows窗体中编写了一个自定义控件。我动态地创建一个垂直滚动条并捕获其值的变化 目前,滚动条是唯一可以获取焦点的控件,因此我的控件充当面板:它将焦点转移到滚动条。当用户使用滚动条时,所有进一步的键盘事件都会传输到滚动条,而不是控制本身 我希望完全禁用滚动条的焦点,并在控件本身中实现适当的行为(例如,向上翻页、向下翻页、主页、结束等)。我发现了一个名为“CanFocus”的属性,但不幸的是它是只读的 如何禁用滚动条的对焦功能?我知道,我可以实现焦点事件并手动将焦点转移到控件,但WF库中可

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

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

我希望完全禁用滚动条的焦点,并在控件本身中实现适当的行为(例如,向上翻页、向下翻页、主页、结束等)。我发现了一个名为“CanFocus”的属性,但不幸的是它是只读的


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

感谢Łukasz O.的帮助

解决方案:

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

}