我有一个组合框来设置用户文化:
c# - FormClosing 事件被多次调用-LMLPHP

如果我更改文化值 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/

10-11 01:51