ソリューション1
まず、VB.Net で複数のイベントをWindows フォームの単一のイベント ハンドラに接続できることを知っておいてください。
Private TextBox1_GotFocus(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.GotFocus, TextBox2.GotFocus
' Add event-handler code here.
End Sub
ソリューション2
次に、テキストボックスのテキストをクリアする汎用イベントハンドラー (元のソリューションと C# コードについて @Miky Dinescu に感謝) は、コードを削減し、いくつかのメソッドを共有するための別の可能なソリューションです。
このコードを Form.vb に入れるか、複数のフォーム間でメソッドを共有する場合は新しいクラス HelperClass に入れるだけです。
Form.vb:
Private Sub ClearTextBox(ByVal sender As Object, ByVal e As EventArgs)
If TypeOf sender Is TextBox Then
(DirectCast(sender, TextBox)).Text = ""
End If
End Sub
または HelperClass.vb で:
Public Shared Sub ClearTextBox(ByVal sender As Object, ByVal e As EventArgs)
If TypeOf sender Is TextBox Then
(DirectCast(sender, TextBox)).Text = ""
End If
End Sub
次に、このハンドラーをすべてのテキスト ボックスに、基本的にはフォームのコンストラクター、FormLoad イベント、またはフォームを表示する前に呼び出す "Initialize" メソッドにアタッチします。
AddHandler textbox1.GotFocus, AddressOf Me.ClearTextBox
AddHandler textbox2.GotFocus, AddressOf Me.ClearTextBox
また
AddHandler textbox1.GotFocus, AddressOf HelperClass.ClearTextBox
AddHandler textbox2.GotFocus, AddressOf HelperClass.ClearTextBox
ただし、このハンドラーをすべての TextBox にアタッチする必要があることを意味します。複数のハンドラーがある場合は、各メソッドを各 TextBox に適用する必要があります...
また、メモリ リークを防ぐためにフォームを閉じるときに AddHandler を明示的に呼び出す場合は、これらのイベント ハンドラもすべて削除する必要があります。
RemoveHandler textbox1.GotFocus, AddressOf HelperClass.ClearTextBox
RemoveHandler textbox2.GotFocus, AddressOf HelperClass.ClearTextBox
したがって、これは、いくつかのコントロール間でメソッドを共有する場合にのみお勧めします。
編集
もちろん、@DonA が示唆するように、ループを使用してここでもコードを減らすことができます。
しかし、忘れないでくださいRemoveHandler
。
ソリューション3
もう 1 つの解決策は、TextBox から継承する独自のカスタム TextBox クラスを作成し、このカスタム クラスを TextBox の代わりに使用するか、既にプロジェクトを作成している場合は既存の TextBox を置き換えることです。
Public Class MyTextbox
Inherits TextBox
Protected OverridesSub OnGotFocus(ByVal e As System.EventArgs)
MyBase.OnGotFocus(e)
Me.Text = String.Empty
End Sub
End Class
次に、プロジェクトをビルドします。ToolBox に MyTextbox が表示されます。それを使用するか、既存の TextBox を MyTextBox に置き換えることができます
このアプローチでは、1 つのクラスのメソッドのみを維持する必要があります。そして、ハンドラーについて心配する必要はありません...
オブジェクト指向プログラミングの優れた機能は継承です: 自分自身を奪わないでください!
最後に、 GetFocusのテキストをクリアすることが、あなたがやろうとしていることに対する良いアプローチであるかどうかはわかりません。WinForms の「Watermark TextBox」または「Cue Banner」のようです。したがって、これに興味があるかもしれません:WinFormsのテキストボックスに透かしを入れるか、Enterイベントの使用を検討して、ユーザー入力の削除を防止してください。
お役に立てれば。