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 プロパティには次のような内容が記載されています。

Control.Focus メソッド - MSDN より引用
コントロールは、一定の条件がすべて 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 に設定した時の動きがどうもしっくりきません。いかなる場合でもフォーカスが設定されないことを望んでいたんですが、簡単にはいかないようですね。