VB.NET: диалоговое окно завершается при нажатии Enter? - PullRequest
1 голос
/ 29 августа 2009

Моя проблема, кажется, довольно проста, но она не работает интуитивно.

Я разрабатываю приложение для Windows Forms, и есть диалоговое окно, которое НЕ должно закрываться при нажатии клавиши ввода, вместо этого оно должно сначала проверить данные, в случае, если ввод был нажат после изменения текста ComboBox .

Я пытался объяснить, что делать с KeyPress событием ComboBox , если e - это Enter :

Private Sub ComboBoxSizeChoose_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles ComboBoxSizeChoose.KeyPress
    If e.KeyChar = Convert.ToChar(Keys.Enter) Then
        Try
            TamanhoDaNovaFonte = Single.Parse(ComboBoxSizeChoose.Text)
        Catch ex As Exception
            Dim Dialogo2 As New Dialog2
            Dialog2.ShowDialog()
            ComboBoxSizeChoose.Text = TamanhoDaNovaFonte
        End Try
    End If
End Sub

Но пока безуспешно. При нажатии клавиши Enter , даже если ComboBox на фокусе , весь диалог закрывается, возвращаясь к предыдущей форме. Проверка НЕ выполнена вообще , и это необходимо сделать перед выходом. На самом деле, я даже не хочу выходить при вводе формы KeyPress, единственная цель клавиши ввода во всем диалоговом окне - проверка ComboBox (но только в фокусе, для интуитивно понятного интерфейса).

Я также попытался добавить проверку к событию KeyPress формы всего диалогового окна, если ключ Введите . НЕТ УСПЕХА! Как будто моего кода там не было вообще.

Что мне делать?

(Visual Studio 2008, VB.NET)

Ответы [ 2 ]

3 голосов
/ 29 августа 2009

Убедитесь, что у вас нет кнопки в диалоговом окне, которая имеет значение, отличное от DialogResult.None.

Например, если у вас установлена ​​кнопка для DialogResult.OK, она будет действовать каккнопку «по умолчанию» и закройте форму.

0 голосов
/ 29 августа 2009

Хотя это и не ваш ответ, я бы рекомендовал не использовать исключения для управления логическим потоком. Тем не менее, попробуйте Single.TryParse , чтобы сделать ваш поток менее ... ну, исключительным.

Чтобы изменить поведение, которое вы видите, измените AcceptButton диалогового окна с вашей кнопки Ok на none. Изменение DialogResult этой кнопки на None не удерживает событие нажатия от запуска, только от закрытия диалога. Хотя поведение может звучать как то, что вы хотите, результат - нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...