Как я могу проверить данные, вводимые пользователем в текстовое поле в проигранном событие фокуса без потери фокуса событие неоднократно стреляли?
У меня есть приложение wpf, в котором пользователь вводит номер рабочего задания в текстовое поле. В случае потери фокуса текстового поля запрашивается база данных для проверки наличия номера рабочего задания. Если нет, то отображается окно сообщения и вызывается метод Focus() элемента управления textbox, чтобы сохранить фокус на этом текстовом поле.
Что на самом деле происходит, так это то, что событие потерянного фокуса срабатывает повторно
Вот xaml для элемента управления textbox:
TextBox x:Name="txtWONumber" IsReadOnly="False" Focusable="True" HorizontalAlignment="Left" Height="23" Margin="174,15,0,0" TextWrapping="Wrap" Text="" VerticalAlignment="Top" Width="120" RenderTransformOrigin="0.384,0.424" FocusManager.LostFocus="TxtWONumber_LostFocus"/>
Вот код обработчика событий:
private void TxtWONumber_LostFocus(object sender, RoutedEventArgs e) { string strWONumber = this.txtWONumber.Text; //MessageBox.Show("Work Order No: " + strWONumber); var qryWorkOrder = (from w in dataEntities.vwWOPatternCheckDatas where w.WONumber == strWONumber orderby w.WONumber select new { w.WONumber }).ToList(); if (qryWorkOrder.Count() == 0) { MessageBox.Show("Work Order Number not found! Please enter a valid Work Order Number."); txtWONumber.Focus(); txtWONumber.SelectAll(); } }
Спасибо,
Брайан Миллер
Что я уже пробовал:
Я пробовал использовать событие LostFocus, а также FocusManager.Событие LostFocus и поведение одинаковы.
Я потратил несколько часов на поиск соответствующей информации в интернете. Кажется, ничто не решает эту ситуацию. Самое близкое, что я нашел, связано с двумя последовательными текстовыми полями в порядке табуляции, каждое из которых имеет событие потери фокуса.
Richard Deeming
NB: Вместо того чтобы подсчитывать все совпадения, чтобы определить, есть ли они, лучше использовать любое из них Any
или All
:
if (!dataEntities.vwWOPatternCheckDatas.Any(w => w.WONumber == strWONumber)) { ... } // Or: if (dataEntities.vwWOPatternCheckDatas.All(w => w.WONumber != strWONumber)) { ... }