今回は、SNLMの中で、スクリーンキーボードを作りたかったので、作ってみようと思ったのですが、通常のボタンだと、残念ながら作れません。
そもそも今回作っているスクリーンキーボードは、focusが当たっているコントロールから取得します。しかし、focusをあたったままにしたいtextboxと、勝手にfocusがあたる通常のbuttonでは、確実に入力時にbuttonにフォーカスが当たっていると認識され、絶対入力することができません。これには、通常のボタンではなく、少しトリックが必要となります。
今回作るのは「カスタムコントロール」というものです。
まず、プロジェクト→ユーザーコントロールの追加→クラス→作成で、ここからコードを入力します。
Class NFButton
Inherits Button
Sub New()
SetStyle(ControlStyles.Selectable, False)
End Sub
End Class
これだけです。ここで一旦実行してください。これらの追加をVS本体に適用するためです。
すると、ツールボックスの中に「NFButton」というコントロールが追加されているはずなので、試しに追加してみてください。何の変哲もない「ただのボタン」ですね。まあ、おそらく最初なので「NFButton1」とか、違う名前ぐらいはついていると思います。それでは、このボタンを配置して、Textboxも配置してみましょう。配置が終わったら、試しに実行してみましょう。
押した後は、Textboxにフォーカスを当てたまま、ボタンを押してみてください。
どうですか?フォーカスが移らないはずです。(絶対ではないですが)
これで、「フォーカスが当たらないボタン、NFButton」、無事完成です。
用途としては、Focusが当たってほしくない時、例にすれば最初も言いましたがスクリーンキーボードとかで使えます。ちなみに、上記のコードを改造すれば、Pictureboxでも、Comboboxでも、Checkboxでも可能です。応用できることには間違いなしです。
おわり
※NFButtonという名前はNoFocusを略したNFとButtonでNFButtonという名称になりました。
※こんな面倒なことをしなくてもLabelコントロールでできますが、挙動や仕様が異なるため、Buttonコントロールにこだわる人はこの方法を使います。