0

次のコードは、フォーカスがあるときにテキスト ボックスのプロパティを変更し、フォーカスを失った後に変更を元に戻します。Enter、Leave、GotFocus、LostFocus イベントの使用に問題があります。これは、テキスト ボックスをクリックまたはタブ移動したときに発生する順序が異なるためです。次のコードは、テキストボックス間でタブ移動し、クリックしない場合にのみ期待どおりに動作します。LostFocus の代わりに Leave イベントを処理するように txtBoxes_ReminderOffFocus を変更すると、テキスト ボックス間をクリックしてもタブではなく、期待どおりに動作します。

Private Sub txtBoxes_ReminderOnFocus(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtHrsWkd.Enter, txtPayRate.Enter, txtFedTaxRate.Enter, txtStTaxRate.Enter
    If sender.Text = "(Numeric Value)" Or sender.Text = "(Percentage)" Then
        Debug.Print("New textbox focused onto.")        'Sets up textboxes for standard input, if they have initial reminder. Check control.enter event for more on focus orderings.
        sender.Clear()
        sender.TextAlign = HorizontalAlignment.Left
        sender.ForeColor = Color.Black
    End If
End Sub

Private Sub txtBoxes_ReminderOffFocus(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtHrsWkd.LostFocus, txtPayRate.LostFocus, txtFedTaxRate.LostFocus, txtStTaxRate.LostFocus
    If sender.Text = "" Then
        Debug.Print("A textbox has lost focus.")
        sender.ForeColor = Color.Gray               'if textbox is empty, fills in initial "numeric value" or "percentage" reminder.
        sender.TextAlign = HorizontalAlignment.Right
        If sender Is txtHrsWkd Or sender Is txtPayRate Then
            sender.Text = "(Numeric Value)"
        Else
            sender.Text = "(Percentage)"
        End If
    End If
End Sub

「txtBoxes_ReminderOffFocus」で

.LostFocus イベントは、クリックではなくテキスト ボックス間でタブ移動するときに期待どおりに機能します。

.Leave イベントは、タブではなくテキスト ボックス間をクリックすると期待どおりに機能します。

4

1 に答える 1