c# - 如何在不触发 FormClosing 的情况下返回上一个表单?
问题描述
我有一个包含多种表单的 winforms 应用程序。为了导航它们,我想使用一种代码:
第一种形式有这个打开新窗口:
private void Button2_Click(object sender, EventArgs e)
{
this.Hide();
Form2 form2 = new Form2();
form2.ShowDialog();
this.Show();
}
在第二种形式中,我有这个回到上一个窗口:
private void ButtonReturn_Click(object sender, EventArgs e)
{
this.DialogResult = DialogResult.OK;
}
但我也有处理关闭第二种形式的功能:
private void Form2_FormClosing(object sender, FormClosingEventArgs e)
{
DialogResult result = MessageBox.Show("Sure?", "Close", MessageBoxButtons.OKCancel, MessageBoxIcon.Information);
if (result.Equals(DialogResult.OK))
{
Environment.Exit(0);
}
else
{
e.Cancel = true;
}
}
所以我的问题如下:我想使用 ButtonReturn 返回上一个表单而不触发表单关闭功能,该功能设置为在“FormClosing”上运行。我希望它仅在按下窗口中的红色 [X] 后运行。buttonReturn 应该导航回以前的表单,而不显示对话框消息。我怎样才能做到这一点?因为现在关闭对话框也会在单击 buttonReturn 后显示。
解决方案
您可以使用FormClosingEventArgs.CloseReason 属性来确定是否显示 MessageBox。
设置DialogResult
模态表单的属性是我知道的唯一CloseReason
时间CloseReason.None。调用Form.Close
或单击“X”按钮将有一个CloseReason
。CloseReason.UserClosing
我建议您仅在CloseReason.UserClosing
条件下显示消息。这符合您声明的意图,并且还可以防止显示该消息以用于其他可能的 CloseReason。
if (e.CloseReason == CloseReason.UserClosing)
{
DialogResult result = MessageBox.Show("Sure?", "Close", MessageBoxButtons.OKCancel, MessageBoxIcon.Information);
if (result.Equals(DialogResult.OK))
{
Environment.Exit(0);
}
else
{
e.Cancel = true;
}
}
推荐阅读
- selenium-webdriver - 有没有办法尽可能多地刷新页面并等待元素在硒中加载到该页面中?
- javascript - 有没有办法在 JavaScript 中跨文件创建全局对象?
- python - 在 python 中写入和分隔单个文本行,由分隔符写入另一个文件的多行
- reactjs - 反应:模块解析失败:意外的令牌
- spring - 配置junit测试时,Spring自动装配环境为空
- php - PHP MySQLi - WHERE“计算值小于”不起作用
- typescript - 打字稿无法识别过滤后的数组都是具有类型保护的一种类型
- dart - 如何为 Sliver 列表的各个项目设置动画
- react-native - 如何使用本机(C++)符号在调试模式下构建 Android React Native 源代码?
- c# - 加载新场景时如何移除这些游戏对象?