我在 Form1 关闭事件中有这个代码:
private void MemberForm_FormClosing(object sender, FormClosingEventArgs e)
{
DialogResult del = MessageBox.Show("Save changes?", "Save", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);
if (del == DialogResult.Yes)
{
// do something
}
if (del == DialogResult.No)
{
// do something
}
if (del == DialogResult.Cancel)
{
e.Cancel = true;
}
...
}
如果我从 form1 中的按钮打开 form2,在 form2 关闭事件中它将再次显示对话框结果。我希望对话框结果只显示在 form1 中。 为什么会这样?
所以我的新问题是:我可以对保存按钮做同样的事情吗?防止第二次写代码? 示例
base.OnClosing(e);
if (e.CloseReason == CloseReason.UserClosing)
{
DialogResult del = MessageBox.Show("Save change?", "Save", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);
if (del == DialogResult.Yes)
{
??????????????
}
if (del == DialogResult.No)
{
Form3 ss = new Form2();
Hide();
ss.ShowDialog();
}
if (del == DialogResult.Cancel)
{
e.Cancel = true;
}
public bool saveToolStripMenuItemClicked { get; set; }
private void saveToolStripMenuItem_Click(object sender, EventArgs e)
{
Form3 ss = new Form3();
Hide();
ss.ShowDialog();
}
现在我想当 dialogresult(是)对 saveToolStripMenuItem_Click 做同样的事情
最佳答案
protected override void OnClosing(CancelEventArgs e)
{
base.OnClosing(e);
if (e.CloseReason == CloseReason.UserClosing)
{
//Some Code
}
}
试试这个,它应该只在你关闭整个应用程序时运行,确保你把它放在主窗体上。
你在 Form2 关闭上运行的原因是因为你有一个成员关闭,据我所知,它在所有关闭的表格上运行
更新
我已经编辑了上面的代码,如果你把代码放在if语句中那么它只会在用户点击关闭按钮时运行
更新 2
protected override void OnClosing(CancelEventArgs e)
{
base.OnClosing(e);
if(BackButtonClicked)
{
//code used for DialogResult.No answer
BackButtonClicked = false;
}
if (e.CloseReason == CloseReason.UserClosing)
{
//Some Code
}
}
public bool BackButtonClicked { get; set; }
private void backButton_Click(object sender, EventArgs e)
{
//Some code
BackButtonClicked = true;
//Some code, close form
}
关于c# - 表单关闭对话框结果出现在所有表单中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37139526/