我有一个PUT
我希望在程序失去焦点时验证它。我的方法可以解决一个问题,即一次又一次地触发事件(当用户输入无效日期时)。
这是我正在使用的方法;
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();
}
}
}
检查,但事件仍然多次发生。如何确保事件仅触发一次?
答案 0 :(得分:2)
如WPF DatePicker LostFocus fires seven times
中所述LostFocus是路由策略设置为Bubble的路由事件。通过 泡沫意味着它会向它的父级冒泡直到根窗口,直到 通过明确设置e.Handled = true;。
处理某处所以,这意味着即使孩子控制松散的焦点,它也会冒出来 到你的datePicker,这就是为什么你看到你的方法有多次点击的原因。
希望这会对你有所帮助。