Не удается вызвать событие проверки текстового поля
У меня есть форма WinForms с текстовым полем, ComboBox и несколькими другими элементами управления. Пользователь может ввести строку поиска в текстовое поле, а затем поле со списком будет отфильтровано на основе строки поиска. Метод фильтрации срабатывает при изменении текста события текстового поля.
Когда пользователь вводит текст в текстовое поле, свойству DroppedDown поля со списком присваивается значение true, чтобы поле со списком открывалось и пользователь мог видеть элементы по мере их фильтрации.
Все это прекрасно работает.
Пользователь может ввести строку фильтра, в результате чего поле со списком будет пустым. Вот тут-то и возникает проблема. В поле со списком должен быть как минимум 1 действительный элемент. Итак, я хотел бы сделать вот что:
Если текстовое поле теряет фокус, я хочу использовать событие проверки, чтобы проверить, есть ли хотя бы один элемент в поле со списком. Если нет, предупредите пользователя и отмените, чтобы фокус оставался в текстовом поле.
Проблема в том, что происходит что-то странное, если я нажимаю на форму, содержащую текстовое поле, и в этом поле со списком нет никаких элементов. Я получаю очень не описательное сообщение об ошибке в родительской форме, которая запустила форму, над которой я работаю.
QueryDesignerTool qdTool = new QueryDesignerTool(); // moved this to QueryDesignerTool_OnLoad function. ens 01/28/2015 //this.Hide(); DialogResult dr = qdTool.ShowDialog(this);
Я получаю
An unhandled exception of type 'System.ArgumentOutOfRangeException' occurred in System.Windows.Forms.dll Additional information: InvalidArgument=Value of '0' is not valid for 'index'.
Во время выполнения кода, если я проверю qdTool и посмотрю на поле со списком, о котором идет речь, я увижу, что SelectedIndex поля со списком равен 0, а количество элементов равно 0, что является незаконным.
Я не уверен, почему он ошибается и возвращается к родительской форме. Но я прошу о помощи не поэтому.
Что меня интересует, так это проверка текста в текстовом поле, если пользователь нажимает на него. Я читал, что фокус не может быть передан в форму, поэтому событие Leave Focus не сработает и, следовательно, событие проверки не сработает, если фокус находится на текстовом поле, а затем пользователь нажимает на форму.
Итак, правильно ли будет тогда перехватить событие щелчка для формы и обработать проверку этого текстового поля?
Что я уже пробовал:
Я описал то, что я пробовал в описании проблемы.
Ralf Meier
Текстовое поле теряет фокус только в том случае, если его получает другой элемент управления ...
Вы пробовали использовать MouseLeave-событие ?