ControlStyles.Selectable スタイルを False に設定すると、そのコントロールにはフォーカスが設定されなくなります。マウスでクリックしても、Tab キーを押してもフォーカスは設定されません。
Public Class ButtonEx
Inherits Button
Public Sub New()
Me.SetStyle(ControlStyles.Selectable, False)
End Sub
End Class
しかし、次の処理を行った場合はフォーカスが設定されてしまうようです(この他にもあるかもしれません)。
- Focus メソッド
- Select メソッド
- ActiveControl プロパティ
Focus メソッドやコントロールを選択出来るかを判定する CanSelect プロパティには次のような内容が記載されています。
コントロールは、一定の条件がすべて true の場合に、選択可能であり、入力フォーカスを受け取ることができます。一定の条件とは、ControlStyles の Selectable 値が true に設定されていること、コントロールが別のコントロールに格納されていること、およびすべての親コントロールが表示されており、有効であることです。
System.Windows.Forms.ControlStyles の Selectable 値が true に設定されていて、別のコントロールに含まれており、コントロール自体とすべての親コントロールが表示されていて有効である場合、このプロパティは true を返します。
ControlStyles.Selectable の値が False の場合はフォーカスは受け取れないと記載されていますが、Control.Focus メソッドを使用するとフォーカスが設定されてしまいます。また Control.CanSelect プロパティは False を返すのですが、Select メソッドを使用するとコントロールにフォーカスが設定されてしまいます。ちなみに Control.CanFocus プロパティは True を返します。
ControlStyles.Selectable を False に設定した時の動きがどうもしっくりきません。いかなる場合でもフォーカスが設定されないことを望んでいたんですが、簡単にはいかないようですね。