[英]FormClosing event being called multiple times
如果我將Culture值更改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
事件問題
從InitializeComponent中刪除添加FormClosing事件處理程序的行:
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FrmParent_FormClosing);
您可以通過manunally或使用設計器刪除處理程序來執行此操作。
然后,不是使用設計器添加此事件處理程序,而是手動添加它,例如通過在調用InitializeComponent
之后向構造函數添加相同的行。
然而,調用InitializeComponent
也將重新初始化您的UI狀態。 也許你可能會尋找其他解決方案,例如這個 (我沒有親自嘗試過,也不能保證)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.