如何在关闭窗体右上角关闭按钮(即X)时给出提示而不是直接关闭?

l_g_guo 2012-03-20 11:47:32
在程序运行中,如何在关闭窗体右上角关闭按钮(即X)时给出提示(如:是否已保存,确定退出?)而不是直接关闭?
在菜单中可以写代码退出系统,而这个关闭不知在哪里设置,在窗体的属性中一直找不到地方进行设置。请高手指点。
...全文
355 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
l_g_guo 2012-03-22
  • 打赏
  • 举报
回复
上面的代码中第二段按OK应该是运行自身,第二次弹出对话框实际应该是运行第一段代码,按OK退出软件。经过调整,代码如下:
Private Sub Rebound_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
If MessageBox.Show("工程数据是否已保存,是否退出?", "真的退出吗?", MessageBoxButtons.OKCancel,
MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2) = Windows.Forms.DialogResult.OK Then
Exit Sub
Else
e.Cancel = True
End If
End Sub

Private Sub 退出XToolStripMenuItem1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 退出XToolStripMenuItem1.Click
Me.Close()
End Sub

上面第二段代码,调用第一段的代码(直接调用过程不行,如Rebound_FormClosing(sender,e),因为e类型不一致而出错。)现在这种情况,可以达到效果。只是不明白,第一段代码中,为何Exit Sub应是退出过程,怎么会是退出程序?
music_0000 2012-03-22
  • 打赏
  • 举报
回复
FormClosing
l_g_guo 2012-03-22
  • 打赏
  • 举报
回复
而确定后面都不加代码(else后面保留),按确定也会退出,即没有Exit Sub、Me.Dispose()或Application.Exit(),都会退出程序,它们有什么区别,是否都释放了内存?
l_g_guo 2012-03-22
  • 打赏
  • 举报
回复
把Exit Sub改成Me.Dispose()可以达到同样效果,不过Me.Dispose()含义清楚。Application.Exit()似乎多余,没有Me.Dispose()有Application.Exit()时,不知为何要确定两次,是否自动+1次重载?
EnForGrass 2012-03-22
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wuyazhe 的回复:]

Form_Closing事件中,判断后,如果阻止,可以写e.Handle = true即可
[/Quote]
不就这么点代码。在FormClosing,不过是C#的

if (MessageBox.Show("您确认要退出吗?", "退出系统", MessageBoxButtons.OKCancel) == DialogResult.OK)
{
this.Dispose();
Application.Exit();
}
else
e.Cancel = true;
l_g_guo 2012-03-21
  • 打赏
  • 举报
回复
调试后,代码调整如下:
Private Sub Rebound_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
If MessageBox.Show("工程数据是否已保存,是否退出?", "真的退出吗?", MessageBoxButtons.OKCancel,
MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2) = Windows.Forms.DialogResult.OK Then
Exit Sub
Else
e.Cancel = True
End If
End Sub
这段代码正常,满足要求(OK退出,Cancel不退出软件)。

Private Sub 退出XToolStripMenuItem1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 退出XToolStripMenuItem1.Click
If MessageBox.Show("工程数据是否已保存,是否退出?", "真的退出吗?", MessageBoxButtons.OKCancel,
MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2) = Windows.Forms.DialogResult.OK Then
Me.Close()
Else
Exit Sub
End If
End Sub
这段代码,按OK需确定两次才退出,按Cancel则退出过程不退出软件。
有何改进办法?请指教。
l_g_guo 2012-03-21
  • 打赏
  • 举报
回复
不好意思,调试后,发觉会陷入死循环,一直在Me.Close()这句上运行。而奇怪的是,没加入这个事件之前,在菜单退出中同样的代码,却能正常运行,即选OK就关闭退出,选Cancel就退出过程(不退出程序),这是为什么?请高手继续指教。
l_g_guo 2012-03-21
  • 打赏
  • 举报
回复
提示e.Handle = true中Handle不是FormClosingEventArgs的成员。
用e.Cancel = True可以阻止退出。最后代码为:
Private Sub Rebound_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
If MessageBox.Show("工程数据是否已保存,是否退出?", "真的退出吗?", MessageBoxButtons.OKCancel,
MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2) = Windows.Forms.DialogResult.OK Then
Me.Close()
Else
Exit Sub
End If
End Sub
谢谢!选择的事件正确。
兔子-顾问 2012-03-20
  • 打赏
  • 举报
回复
Form_Closing事件中,判断后,如果阻止,可以写e.Handle = true即可
兔子-顾问 2012-03-20
  • 打赏
  • 举报
回复
Form_Closing事件中,判断后,如果阻止,可以写e.Handle = true即可

16,722

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧