2013-07-15 2 views
1

отменить У меня есть DialogBox с кнопкой отмены называется следующим образом:Второе нажатие требуется на кнопку

Dim dlgSizSelection As New dlgTyreSizeSelection(objCarWebVehicle.Tyres, objCarWebVehicle) 

       If (dlgSizSelection.ShowDialog) = Windows.Forms.DialogResult.OK Then 
        selectedTyre = CType(dlgSizSelection.lstTyreOptions.SelectedItem, CarWebVehicleCOM.TyreData) 
        dlgSizSelection.Close() 
       ElseIf (dlgSizSelection.ShowDialog) = Windows.Forms.DialogResult.Cancel Then 
        dlgSizSelection.Close() 
        Exit Sub 
       Else 
        MsgBox("No tyre sizes selected.", MsgBoxStyle.Exclamation, "Tyre Search") 
        dlgSizSelection.Close() 
        Exit Sub 
       End If 

Однако, когда я установил свойство DialogReturn в виде своего призвания следующим образом:

DialogResult = Windows.Forms.DialogResult.Cancel 

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

Что мне не хватает?

+0

Не могли бы вы вывести код, где dlgTyreSizeSelection определен? – varocarbas

+0

Не нужно - проблема явно в приведенном выше коде. –

+0

@Thorsten Dittmar OK, спасибо за исправление. Увидев, что оба варианта «ОК» и «Отмена» делали то же самое, и что он только жалуется на «Отмена»; Я думал, что может быть что-то неправильное в том, как определяется dlgTyreSizeSelection. Но я думаю, что я должен был проанализировать/протестировать код, прежде чем прийти к такому выводу. – varocarbas

ответ

3

Прежде всего: не вызывайте близко после возвращения модального диалога. Модальный диалог автоматически закрывается.

Ваш код является проблематичным по следующей причине: Вы звоните ShowDialog более одного раза. Если ваш код определяет, что OK не был нажат, он снова отобразит диалоговое окно , ожидая, что пользователь снова нажмет.

If (dlgSizSelection.ShowDialog) = Windows.Forms.DialogResult.OK Then 
    ... 

ElseIf (dlgSizSelection.ShowDialog) = Windows.Forms.DialogResult.Cancel Then 
    ... 
End If 

Объявите локальную переменную, которая держит результат одного вызова к ShowDialog и все будет работать нормально:

Dim result as Windows.Forms.DialogResult = dlgSizSelection.ShowDialog 

If (result = Windows.Forms.DialogResult.OK) Then 
    .... 
ElseIf (result = Windows.Format.DialogResult.Cancel) Then 
    .... 
Else 
    .... 
End If 

Не вызов Close и нет необходимости в Exit Sub ,

+0

Спасибо, я добрался до решения около двух минут после того, как я разместил здесь, я положил это решение в оператор switch и только вызвал метод show один раз. Спасибо за советы по близким методам. Exit Sub должен оставаться таким же, как и после этого фрагмента кода. – user1708468

Смежные вопросы