0

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

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

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

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

4

1 回答 1

0

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

}
于 2012-11-29T10:21:23.863 回答