我有一个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检查,但是事件仍然多次触发。如何确保事件只触发一次?
发布于 2016-11-14 14:53:23
如WPF DatePicker LostFocus fires seven times中所述
LostFocus是一个路由事件,路由策略设置为Bubble。它意味着它会一直泡到它的父窗口,直到根窗口,直到通过显式设置e.Handled =true来处理。 因此,这意味着,即使子控件失去了焦点,它也会冒泡到您的datePicker,这就是为什么您看到多个命中您的方法。
https://stackoverflow.com/questions/40591434
复制相似问题