0

フォームに多くのテキストボックス (約 10) を取得しました。テキストボックス内のテキストがフォーカスされるたびに強調表示されるようにします。そのためのコードは次のようになります。

Private Sub txtBillNo_GotFocus(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtBillNo.GotFocus
   HoverText(txtBillNo)
End Sub

Private Sub HoverText(ByRef ctrl as TextBox)
   ctrl.SelectAll()
End Sub

それは完全に機能しますが、ここでコードの最適化を行うことができました。約 10 個のテキスト ボックス (および複数のテキスト ボックスを含む他の多くのフォーム) があるためHoverText(TextBox)Private Sub.. Handles TextBox.GotFocus各フォームのすべてのテキスト ボックスにすべてのテキスト ボックスを配置する必要があります。

MouseClick または TAB のいずれかによって、フォーム内の別のコントロール (テキスト ボックス) にフォーカスが与えられたときにトリガーされるフォーム イベント (またはその他の方法) を探しますHoverText(TextBox)

4

2 に答える 2

3

Handles句にすべてのテキストボックスをリストできます。

Private Sub atextbox_GotFocus(ByVal sender As System.Object, ByVal e As _
 System.EventArgs) _
           Handles txt1.GotFocus, _
                   txt2.GotFocus, _
                   txt3.GotFocus, _
                   (...remaining text boxes..)
                   txt9.GotFocus, _
                   txt10.GotFocus

または、フォームをロードするときにすべてのテキスト ボックスにハンドラーを追加できます。

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    For Each t In Me.Controls.OfType(Of TextBox)()
        AddHandler t.GotFocus, AddressOf HoverText
    Next
End Sub

Private Sub HoverText(ByVal sender As System.Object, ByVal e As System.EventArgs)
    DirectCast(sender, TextBox).SelectAll()
End Sub
于 2013-01-13T10:07:31.750 に答える
2

クラスの動作を変更する .NET の方法は、新しいクラスを派生させることです。これは、VB.NET と Winforms でも十分にサポートされています。Control から派生したクラスでは、Xxx がイベント名である保護された OnXxx イベントをオーバーライドすることにより、イベントをインターセプトできます。Enter イベントを使用する必要があります。Project + Add Class を使用して、コードを次のようにします。

Public Class MyTextBox
    Inherits TextBox

    Protected Overrides Sub OnEnter(ByVal e As System.EventArgs)
        Me.Select(0, Me.Text.Length)
        MyBase.OnEnter(e)
    End Sub
End Class

コンパイル。フォームに戻り、ツールボックスの上部に新しいコントロールがあることに注意してください。それをフォームにドラッグし、フォームにコードやイベント ハンドラーをまったく記述せずに、希望どおりに動作するようになったことを確認します。

于 2013-01-13T10:30:39.073 に答える