0

Windowsフォームでカスタムコントロールを作成しました。垂直スクロールバーを動的に作成し、その値の変更をキャプチャします。

現在、スクロールバーはフォーカスを取得できる唯一のコントロールであるため、私のコントロールはパネルとして機能します。つまり、フォーカスをスクロールバーに転送します。ユーザーがスクロールバーを使用すると、それ以降のすべてのキーボードイベントは、コントロール自体ではなく、スクロールバーに転送されます。

スクロールバーのフォーカスを完全に無効にし、コントロール自体に適切な動作(Page Up、Page Down、Home、Endなど)を実装したいと思います。「CanFocus」という名前のプロパティを見つけましたが、残念ながら読み取り専用です。

スクロールバーのフォーカス機能を無効にするにはどうすればよいですか?フォーカスイベントを実装して手動でフォーカスをコントロールに転送できることは知っていますが、WFライブラリにすぐに使えるソリューションがあるのではないでしょうか。

4

1 に答える 1

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

}
于 2012-11-29T10:21:23.863 に答える