簡體   English   中英

多次調用FormClosing事件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM