2 回答
TA贡献1883条经验 获得超3个赞
您可以使用FormClosingEventArgs.CloseReason 属性来确定是否显示 MessageBox。
设置DialogResult
模态表单的属性是我知道的唯一一次将CloseReason
是CloseReason.None。调用Form.Close
或单击“X”按钮将显示一个CloseReason
of 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;
}
}
TA贡献2011条经验 获得超2个赞
最简单的方法是this.Hide();在第二种形式中使用来隐藏它:
private void ButtonReturn_Click(object sender, EventArgs e)
{
this.Hide();
}
但是,每次单击第一个 Form 中的 Button2_Click 事件时,都会启动一个新的 Form2。如果您希望第二个表单保持不变/保留文本框中的值等,您应该在按钮单击事件之外定义表单,并仅在尚未使用时实例化它。像这样的东西:
Form2 form2;
private void Button2_Click(object sender, EventArgs e)
{
if(form2 == null) { form2 = new Form2();}
this.Hide();
form2.ShowDialog();
this.Show();
}
编辑: 为了防止触发关闭事件,您可以定义一个布尔值来检查是否按下了返回按钮。然后每次使用 Form_Activated 再次打开表单时重置该值:
bool showClosingEventMessage = true;
private void button1_Click(object sender, EventArgs e)
{
showClosingEventMessage = false;
this.Hide();
}
private void Form2_Activated(object sender, EventArgs e)
{
showClosingEventMessage = true;
}
private void Form2_FormClosing(object sender, FormClosingEventArgs e)
{
if (showClosingEventMessage)
{
DialogResult result = MessageBox.Show("Sure?", "Close", MessageBoxButtons.OKCancel, MessageBoxIcon.Information);
if (result.Equals(DialogResult.OK))
{
Environment.Exit(0);
}
else
{
e.Cancel = true;
}
}
}
- 2 回答
- 0 关注
- 151 浏览
添加回答
举报