从另一个事件中取消 FormClosing 事件?
FormClosing event cancel from within another event?
学校项目要求我创建一个网络浏览器。
在上下文菜单中,我有一个 "Exit" 按钮,它可以执行一系列操作,例如将数据上传到 SQL 数据库等。如果 "try" 块中出现错误,则 catch 块向用户询问是否要关闭。
在 "formclosing" 事件中,我已经从 "exit" 按钮连接了我已经存在的 "exit" 功能,这样如果用户按下红色 "X"(在window 屏幕)关闭表单将具有相同的效果。
问题在于,因为它是一个 "formclosing" 事件,即使用户通过 "Exit" 按钮在问题对话框中选择了 "no",它也会关闭表单。
所以我的问题是如何从 "Exit" 按钮中取消 "formclosing" 请求?
P.S。
请忽略 delete sql 命令等奇怪的东西,我们老师有一些奇怪的要求。假设这确实是请求的功能。
private void יציאהToolStripMenuItem_Click(object sender, EventArgs e)
{
Favorite fav;
SqlCommand delfav = new SqlCommand("DELETE FROM tblFavorites", conn);
SqlCommand addfav = new SqlCommand("INSERT INTO tblFavorites VALUES (@title, @url)", conn);
addfav.Parameters.Add("@title", SqlDbType.NVarChar, 100);
addfav.Parameters.Add("@url", SqlDbType.NVarChar, 300);
try
{
conn.Open();
delfav.ExecuteNonQuery();
for (int i=0; i<favorites.Items.Count; i++)
{
fav = (Favorite)favorites.Items[i];
addfav.Parameters["@title"].Value = fav.getsettitle;
addfav.Parameters["@url"].Value = fav.getseturl;
addfav.ExecuteNonQuery();
}
Application.Exit();
}
catch
{
DialogResult dialogResult = MessageBox.Show("There was a problem loading your favorites to the database. Do you still wish to quit? \n (All changes to the favorites list will be lost)", "", MessageBoxButtons.YesNo);
if (dialogResult == DialogResult.Yes)
{
Application.Exit();
}
else
{
//Cancel the formclosing event here!
}
}
finally
{
conn.Close();
}
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
יציאהToolStripMenuItem_Click(null, null);
}
您应该替换这两个事件处理程序的功能。你也应该使用 this.Close()
而不是 Application.Exit()
private void ToolStripMenuItem_Click(object sender, EventArgs e)
{
this.Close();
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
// your code
try
{
// your code
}
catch
{
DialogResult dialogResult = MessageBox.Show("There was a problem loading your favorites to the database. Do you still wish to quit? \n (All changes to the favorites list will be lost)", "", MessageBoxButtons.YesNo);
if (dialogResult != DialogResult.Yes)
{
//Cancel the formclosing event here!
e.Cancel = true;
}
}
finally
{
conn.Close();
}
}
学校项目要求我创建一个网络浏览器。 在上下文菜单中,我有一个 "Exit" 按钮,它可以执行一系列操作,例如将数据上传到 SQL 数据库等。如果 "try" 块中出现错误,则 catch 块向用户询问是否要关闭。
在 "formclosing" 事件中,我已经从 "exit" 按钮连接了我已经存在的 "exit" 功能,这样如果用户按下红色 "X"(在window 屏幕)关闭表单将具有相同的效果。
问题在于,因为它是一个 "formclosing" 事件,即使用户通过 "Exit" 按钮在问题对话框中选择了 "no",它也会关闭表单。
所以我的问题是如何从 "Exit" 按钮中取消 "formclosing" 请求?
P.S。 请忽略 delete sql 命令等奇怪的东西,我们老师有一些奇怪的要求。假设这确实是请求的功能。
private void יציאהToolStripMenuItem_Click(object sender, EventArgs e)
{
Favorite fav;
SqlCommand delfav = new SqlCommand("DELETE FROM tblFavorites", conn);
SqlCommand addfav = new SqlCommand("INSERT INTO tblFavorites VALUES (@title, @url)", conn);
addfav.Parameters.Add("@title", SqlDbType.NVarChar, 100);
addfav.Parameters.Add("@url", SqlDbType.NVarChar, 300);
try
{
conn.Open();
delfav.ExecuteNonQuery();
for (int i=0; i<favorites.Items.Count; i++)
{
fav = (Favorite)favorites.Items[i];
addfav.Parameters["@title"].Value = fav.getsettitle;
addfav.Parameters["@url"].Value = fav.getseturl;
addfav.ExecuteNonQuery();
}
Application.Exit();
}
catch
{
DialogResult dialogResult = MessageBox.Show("There was a problem loading your favorites to the database. Do you still wish to quit? \n (All changes to the favorites list will be lost)", "", MessageBoxButtons.YesNo);
if (dialogResult == DialogResult.Yes)
{
Application.Exit();
}
else
{
//Cancel the formclosing event here!
}
}
finally
{
conn.Close();
}
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
יציאהToolStripMenuItem_Click(null, null);
}
您应该替换这两个事件处理程序的功能。你也应该使用 this.Close()
而不是 Application.Exit()
private void ToolStripMenuItem_Click(object sender, EventArgs e)
{
this.Close();
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
// your code
try
{
// your code
}
catch
{
DialogResult dialogResult = MessageBox.Show("There was a problem loading your favorites to the database. Do you still wish to quit? \n (All changes to the favorites list will be lost)", "", MessageBoxButtons.YesNo);
if (dialogResult != DialogResult.Yes)
{
//Cancel the formclosing event here!
e.Cancel = true;
}
}
finally
{
conn.Close();
}
}