我有一个winforms应用程序,我需要一个很好的方法来处理以下...
基本上,我有主要的申请表格,在其中,我有儿童表格。
用户可以点击'关闭'在父表格上。 但在儿童形式中,有些事情可能正在发生。例如,我可能已经编辑了一些数据绑定字段。
我目前正在接近孩子,并正确保存任何更改。
但是,现在我想要取消关闭的选项。因此,子表单会提示用户,他们实际上可以取消关闭应用程序。
我在儿童表格结束活动中尝试了e.Cancel,但这不起作用 - 我假设因为父母仍在关闭......有没有办法取消父表格&#39从孩子内部关闭过程......?
答案 0 :(得分:1)
我建议在主表单中订阅FormClosing
事件并验证每个子表单的状态并防止表单关闭(如果需要)。下面的代码可能对您有所帮助,并对细节有充分的了解。
private void Main_FormClosing( object sender, FormClosingEventArgs e )
{
foreach(var f in childforms)
{
if(!f.CanClose())
{
e.Cancel = true;
return;
}
}
e.Cancel = false;
}
答案 1 :(得分:0)
这是一个单独子表单的一个非常简单的示例。如果用户在Form2的文本框中输入了某些内容,则在尝试关闭form1时会提示他。
public partial class Form1 : Form
{
Form2 form2;
public Form1()
{
form2 = new Form2();
form2.Show();
InitializeComponent();
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
if (form2.AskBeforeClosing)
{
e.Cancel = MessageBox.Show("Are you sure?","",MessageBoxButtons.OKCancel)==System.Windows.Forms.DialogResult.Cancel;
}
}
}
public partial class Form2 : Form
{
public bool AskBeforeClosing
{
get {
return textBox1.Text != "";
}
}
public Form2()
{
InitializeComponent();
}
private void Form2_Load(object sender, EventArgs e)
{
}
}
如果您需要处理可变数量的子表单,则必须执行以下操作:
AskBeforeClosing