c#删除dialogresult
c# Delete dialogresult
如何删除 DialogResult 对象?
我将其用作清除表单的确认(删除所有控件并重新初始化控件)。问题是,当我点击是时,它会重新创建第二个 DialogResult,然后是第三个,然后是第四个,等等。
所以当用户点击是时,我想删除这个 DialogResult。有办法吗?
代码在这里:
private void GUI_DCP_FormClosing(object sender, FormClosingEventArgs e)
{
var confirmation_text = "If you click 'Yes', all information will be discarded and form reset. If you want to save the input click 'No' and then 'Save'";
DialogResult dialogResult = MessageBox.Show(confirmation_text, "WARNING", MessageBoxButtons.YesNo);
if (dialogResult == DialogResult.Yes)
{
this.Hide();
e.Cancel = true; // this cancels the close event.
this.Controls.Clear();
this.InitializeComponent();
this.Height = 278;
this.Width = 341;
}
else
{
e.Cancel = true;
}
}
当您回忆起 InitializeComponent 时,您不仅是在重新添加控件,而且还在重新添加所有事件处理程序 INCLUDING 链接到表单本身的事件处理程序(FormClosing 事件和其他事件,如果存在的话)。
这样,第一次调用似乎很顺利,但第二次注册了FormClosing事件处理程序。因此,当您触发进入 FormClosing 事件处理程序的操作时,它会被调用两次,并且在同一次调用中,它将再次注册,并在下一次调用时进行三次等等。
停止此行为的最简单方法是在调用 InitializeComponent 之前删除 FormClosing 事件处理程序
if (dialogResult == DialogResult.Yes)
{
this.Hide();
e.Cancel = true;
// This removes the FormClosing event handler.
// If other event handlers are present you should remove them also.
this.FormClosing -= GUI_DCP_FormClosing;
this.Controls.Clear();
this.InitializeComponent();
this.Height = 278;
this.Width = 341;
// Do not forget to reshow your hidden form now.
this.Show();
}
但我真的不认为清除控件集合并再次调用 InitializeComponent 是个好主意。
如果您有许多事件处理程序,您应该在调用 InitializeComponent 之前将它们全部删除,除此之外,这种方法会影响您的性能和内存占用。
相反,我会准备一个包含所有动态添加的控件的列表,然后将它们一一删除。其次,我会编写一个程序来将固定控件重置为其初始值,而无需将它们从控件集合中移除并一次又一次地读取它们。
如何删除 DialogResult 对象? 我将其用作清除表单的确认(删除所有控件并重新初始化控件)。问题是,当我点击是时,它会重新创建第二个 DialogResult,然后是第三个,然后是第四个,等等。
所以当用户点击是时,我想删除这个 DialogResult。有办法吗?
代码在这里:
private void GUI_DCP_FormClosing(object sender, FormClosingEventArgs e)
{
var confirmation_text = "If you click 'Yes', all information will be discarded and form reset. If you want to save the input click 'No' and then 'Save'";
DialogResult dialogResult = MessageBox.Show(confirmation_text, "WARNING", MessageBoxButtons.YesNo);
if (dialogResult == DialogResult.Yes)
{
this.Hide();
e.Cancel = true; // this cancels the close event.
this.Controls.Clear();
this.InitializeComponent();
this.Height = 278;
this.Width = 341;
}
else
{
e.Cancel = true;
}
}
当您回忆起 InitializeComponent 时,您不仅是在重新添加控件,而且还在重新添加所有事件处理程序 INCLUDING 链接到表单本身的事件处理程序(FormClosing 事件和其他事件,如果存在的话)。
这样,第一次调用似乎很顺利,但第二次注册了FormClosing事件处理程序。因此,当您触发进入 FormClosing 事件处理程序的操作时,它会被调用两次,并且在同一次调用中,它将再次注册,并在下一次调用时进行三次等等。
停止此行为的最简单方法是在调用 InitializeComponent 之前删除 FormClosing 事件处理程序
if (dialogResult == DialogResult.Yes)
{
this.Hide();
e.Cancel = true;
// This removes the FormClosing event handler.
// If other event handlers are present you should remove them also.
this.FormClosing -= GUI_DCP_FormClosing;
this.Controls.Clear();
this.InitializeComponent();
this.Height = 278;
this.Width = 341;
// Do not forget to reshow your hidden form now.
this.Show();
}
但我真的不认为清除控件集合并再次调用 InitializeComponent 是个好主意。
如果您有许多事件处理程序,您应该在调用 InitializeComponent 之前将它们全部删除,除此之外,这种方法会影响您的性能和内存占用。
相反,我会准备一个包含所有动态添加的控件的列表,然后将它们一一删除。其次,我会编写一个程序来将固定控件重置为其初始值,而无需将它们从控件集合中移除并一次又一次地读取它们。