【问题标题】:Second press required on cancel button取消按钮需要第二次按下
【发布时间】:2013-07-13 06:13:39
【问题描述】:

我有一个带有取消按钮的对话框,如下所示:

 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

然后按下取消按钮,它会短暂闪烁,然后对话框重新出现,就像我什么都没按下一样,为了让它完全关闭,我必须再次按下它。

我错过了什么?

【问题讨论】:

  • 能否请您发布定义 dlgTyreSizeSelection 的代码?
  • 没必要 - 问题显然在上面的代码中。
  • @Thorsten Dittmar 好的,感谢您的更正。在看到 OK 和 Cancel 选项都在做同样的事情并且他只抱怨 Cancel 之后;我认为定义 dlgTyreSizeSelection 的方式可能有问题。但我想我应该在得出这个结论之前分析/测试代码。

标签: .net windows vb.net winforms


【解决方案1】:

首先:不要在模态对话框返回后调用 close。模态对话框会自动关闭。

您的代码有问题,原因如下:您不止一次调用ShowDialog。如果您的代码确定没有单击“确定”,它会显示对话框再次,等待用户再次单击。

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

【讨论】:

  • 谢谢,我在这里发帖大约两分钟后得到了解决方案,我将决定放在了 switch 语句中,并且只调用了一次 show 方法。感谢您对关闭方法的建议。在这段代码之后,Exit Sub 需要保持原样。
猜你喜欢
  • 2020-01-23
  • 2018-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-22
  • 2021-03-16
  • 2019-04-20
相关资源
最近更新 更多