我的程序有两种关闭方式,一种是右上角的“X”,另一种是“退出”按钮。现在,当满足某个条件时按下其中任何一个时,会弹出一条消息,通知用户他们尚未保存。如果他们DID保存,则不会弹出消息并且程序正常关闭。现在,当弹出消息时,用户将获得一个带有“是”和“否”按钮的MessageBox。如果按“是”,则程序需要保存。如果按“否”,程序需要取消用户按下“X”或“退出”按钮时启动的关闭事件。
这样做的最佳方式是什么?
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
TryClose();
}
private void TryClose()
{
if (saved == false)
{
//You forgot to save
//Turn back to program and cancel closing event
}
}
答案 0 :(得分:4)
FormClosingEventArgs
包含Cancel
属性。只需设置e.Cancel = true;
即可阻止表单关闭。
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
if (!saved)
e.Cancel = true;
}
编辑以回应评论:
由于您的目标是允许使用相同的“保存方法”,因此我会将其更改为成功时返回bool
:
private bool SaveData()
{
// return true if data is saved...
}
然后你可以写:
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
// Cancel if we can't save
e.Cancel = !this.SaveData();
}
您的按钮处理程序等仍然可以根据需要调用SaveData()
。
答案 1 :(得分:1)
这将满足您的需求:
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
e.Cancel = !TryClose();
}
private bool TryClose()
{
return DialogResult.Yes == MessageBox.Show("Are you sure?", "Are you sure?", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
}
答案 2 :(得分:0)
使用事件args的Cancel
property,将其设置为true以取消。
答案 3 :(得分:0)
要取消结束事件,只需在Cancel
实例上将true
属性设置为FormClosingEventArgs
if (!saved) {
// Message box
e.Cancel = true;
}
答案 4 :(得分:0)
您可以从退出按钮调用关闭。然后像其他人所说的那样处理Forms.FormClosing事件中的关闭。这将处理从“X”
退出按钮单击和表单关闭答案 5 :(得分:0)
覆盖OnFormClosing:
protected override void OnFormClosing(FormClosingEventArgs e)
{
if (saved == true)
{
Environment.Exit(0);
}
else /* consider checking CloseReason: if (e.CloseReason != CloseReason.ApplicationExitCall) */
{
//You forgot to save
e.Cancel = true;
}
base.OnFormClosing(e);
}
答案 6 :(得分:0)
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
e.Cancel = !TryClose();
}
private bool TryClose()
{
if (!saved)
{
if (usersaidyes)
{
// save stuff
return true;
}
else if (usersaidno)
{
// exit without saving
return false;
}
else
{
// user cancelled closing
return true;
}
}
return true;
}