【发布时间】:2016-02-23 13:50:14
【问题描述】:
我的WindowsFormApplication 中有两个表单,分别命名为 Form1 和 Form2。这个想法是当程序关闭时,它会显示一个对话框来确认它。
Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Form2.Show()
Me.Close()
End Sub
Private Sub Form1_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing
MessageBox.Show("You are About to cancel the Setup.","Cancel Setup?",
MessageBoxButtons.OK,
MessageBoxIcon.Exclamation,
MessageBoxDefaultButton.Button1)
End Sub
End Class
直到这里,我的代码工作正常,但问题是当我单击 Button1 时,出现消息框以确认 Form1 的关闭。
我不希望这种情况发生,所以我尝试将Me.Close() 更改为Me.Hide。我成功阻止了消息框的出现,但后来又遇到了另一个问题。当表单隐藏时,它在后台保持活动状态,我也不希望这种情况发生。
我在Form1_FormClosing 中添加的另一件事是Me. Close 和Form2.Close。一旦程序的活动表单被关闭,这可以关闭两个表单。但同样,有一个问题。一旦我单击关闭按钮,消息框就会填满屏幕并且不听我的命令。有人对此有解决方案吗?
【问题讨论】:
-
首先,为什么会有那个消息框?您不会询问用户是否真的要取消设置,您只需通知他们他们已经取消设置,他们所能做的就是单击“确定”,因此这并不是与该情况真正相关的对话框。在此处说明您要实现的目标,有人可以提供更好的解决方案。
-
当您执行此操作时,现在 Form2 的工作就是显示“您确定”消息。因此,您需要一个布尔类型的变量来抑制消息框,在 Click 事件处理程序中将其设置为 True。请考虑将 ShowDialog() 作为常用的替代方法,以便您的 Form1 保持“主窗口”。或者“向导”风格用户界面的简单替代方案,TabControl without visible tabs。或者只是两个 UserControls 和一个表单,使用它们的 Visible 属性。
-
此代码适用于所有表单(Form1 - Form4),如果可能,您能否在代码中提供改进的答案支持?
-
是的,可能会发生很多错误。如果用户错误地单击了关闭按钮并且他们在程序中取得了巨大的进步,他会感到筋疲力尽。这就是为什么我想在我的程序中包含救生消息框。
-
这就是为什么我说您应该询问用户是否要取消设置并让他们选择按是或否并对他们的回答做出反应。现在您只需告诉他们他们'已取消,他们所能做的就是单击“确定”。但我同意@Hans,您应该在一个表单上执行此操作,并随着用户的进展切换到不同的面板或选项卡。
标签: vb.net visual-studio