簡體   English   中英

LostFocus方法多次觸發

[英]LostFocus Method Firing Multiple Times

我有一個MaskedTextBox ,當程序失去對它的關注時,我想對其進行驗證。 我的方法有效地解決了我想解決的一個問題,該事件一遍又一遍地觸發,而不是一次觸發(當用戶輸入無效日期時)。

這是我正在使用的方法;

private void onDateTextBox_LostFocus(object sender, RoutedEventArgs e)
{
    TextBox _dateTexBox = sender as TextBox;
    if (!_dateTexBox.IsKeyboardFocusWithin)
    {
        if (Convert.ToInt32(dateTextBox.Text.Substring(0, 2)) > 31)
        {
            MessageBox.Show("Invalid day.");
            dateTextBox.Focus();
        }

        if (Convert.ToInt32(dateTextBox.Text.Substring(3, 2)) > 12)
        {
            MessageBox.Show("Invalid month.");
            dateTextBox.Focus();
        }

        if (Convert.ToInt32(dateTextBox.Text.Substring(6, 4)) > 2100)
        {
            MessageBox.Show("Invalid year.");
            dateTextBox.Focus();
        }
    }
}

我輸入了IsKeyboardFocusWithin檢查,但是該事件仍然觸發多次。 如何確保事件僅觸發一次?

WPF中所述, DatePicker LostFocus觸發七次

LostFocus是一個路由事件,其路由策略設置為Bubble。 冒泡表示它會冒泡直到其父窗口直到根窗口,直到通過顯式設置e.Handled = true;進行處理為止。

因此,這意味着即使子控件失去焦點,它也會冒泡到您的datePicker,這就是為什么您看到該方法多次命中的原因。

希望這對您有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM