«Exit Sub» на кнопке DialogResult.OK - PullRequest
3 голосов
/ 04 января 2011

У меня есть форма VB.NET (CopyScenarioForm) с кнопкой ОК (DialogResult property = OK), а также для нее присвоено значение Accept Button.

Я показываю эту форму из моей основной формы (mainForm), используя

If DialogResult.OK = CopyScenarioForm.ShowDialog() Then
      DoSomething()
End if

Теперь, когда пользователь нажимает кнопку CopyScenarioForm.OK, я хочу проверить его записи и, если они недействительны, я хочу Exit Sub из обработчика нажатия кнопки OK, но когда я это делаю, форма все еще закрывается и DoSomething() исполняется. Есть ли способ, чтобы остановить это и сохранить форму и выйти, только если входные данные действительны. Я заметил, что если я изменю свойство DialogResult кнопки OK на NONE вместо OK, это не приведет к его закрытию. но тогда как я узнаю, как пользователь вышел из формы для выполнения DoSomething() ?.

Ответы [ 2 ]

6 голосов
/ 04 января 2011

Происходит следующее: когда в конструкторе DialogResult для кнопки установлено значение «ОК», это значение устанавливается каждый раз при нажатии кнопки «ОК», независимо от того, что. Таким образом, даже если вы рано выходите из обработчика событий, используя Exit Sub, форма вызова видит DialogResult «OK».

Как вы обнаружили, вам сначала нужно установить для свойства DialogResult кнопки значение "Нет" в конструкторе, а затем обработать установку свойства DialogResult на правильное значение вручную в событии нажатия кнопки "ОК". обработчик. Например:

Private Sub OKButton_Click(ByVal sender As Object, ByVal e As System.EventArgs)
    If EntriesAreValid Then
        'Return OK to the calling form
        Me.DialogResult = DialogResult.OK
    Else
        'Show an error message, but keep the form open
        MessageBox.Show("One or more of your entries were invalid.")
    End If
End Sub

Кроме того, вы можете оставить для свойства DialogResult значение «ОК» в конструкторе и просто переопределить его при сбое проверки, установив для него значение «Нет». Это, вероятно, приводит к более чистому коду:

Private Sub OKButton_Click(ByVal sender As Object, ByVal e As System.EventArgs)
    If Not EntriesAreValid Then
        'Show an error message
        MessageBox.Show("One or more of your entries were invalid.")

        'Clear the DialogResult property and keep the form open
        Me.DialogResult = DialogResult.None
    End If
End Sub
0 голосов
/ 04 января 2011

Установите его из своего кода, если все подтвердится.

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