我有一个组合框来设置用户文化:
如果我更改文化值 x 次,当用户尝试退出 FormClosing 方法时,将触发 x 次。
这是我的 FormClosing 事件:
private void FrmParent_FormClosing(object sender, FormClosingEventArgs e)
{
if (MessageBox.Show(this, Properties.Resources.msgExit, this.Text, MessageBoxButtons.YesNo, MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.No)
e.Cancel = true;
}
这是我的组合框值更改事件:
void cbCulture_ToolValueChanged(object sender, ToolEventArgs e)
{
ComboBoxTool cbCulture = (ComboBoxTool)sender;
var culture = cbCulture.Value.ToString();
FormHelpers.SetCulture(culture);
this.Controls.Clear();
this.InitializeComponent();
InitForm();
}
我必须清理和初始化控件以将 UI 更改为新的文化,但这样做我是否在 InitializeComponent() 中多次分配 FormClosing 事件?我怎样才能避免这种行为?
最佳答案
这是因为 InitializeComponent
,在该方法中设置了 forms design mode
properties/events
。所以每次它添加 FormClosing
event
一个。为了避免这种情况,在 this.InitializeComponent();
上方添加这一行
this.FormClosing -= new System.Windows.Forms.FormClosingEventHandler(this.FrmParent_FormClosing);
注意: 只解决
FormClosing
事件问题关于c# - FormClosing 事件被多次调用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42001948/