我在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进行相同的操作
答案 0 :(得分:1)
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
}