首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多次调用FormClosing事件

多次调用FormClosing事件
EN

Stack Overflow用户
提问于 2017-02-02 12:12:11
回答 2查看 1.2K关注 0票数 3

我有一个组合框来设置用户文化:

如果我更改区域性值x倍,当用户试图退出FormClosing方法时,将触发x时间。

这是我的FormClosing事件:

代码语言:javascript
复制
    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;
    }

这是我的组合框值更改事件:

代码语言:javascript
复制
    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()中多次分配InitializeComponent事件?我怎样才能避免这种行为?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-02-02 12:20:04

这是因为InitializeComponent,在那个方法中设置了forms design mode properties/events。因此,每次它再添加一次FormClosing event。要避免这种情况,请在this.InitializeComponent();前面添加这一行

代码语言:javascript
复制
this.FormClosing -= new System.Windows.Forms.FormClosingEventHandler(this.FrmParent_FormClosing);

注意:只解决FormClosing事件问题

票数 5
EN

Stack Overflow用户

发布于 2017-02-02 12:23:46

从FormClosing事件处理程序中删除添加InitializeComponent事件处理程序的行:

代码语言:javascript
复制
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FrmParent_FormClosing);

您可以使用设计器手动地或通过删除处理程序来完成此操作。

然后,不要使用设计器添加此事件处理程序,而是手动添加它,例如,在调用InitializeComponent之后将同一行添加到构造函数中。

然而,调用InitializeComponent也会重新初始化您的UI状态。也许您可能会寻找其他解决方案,比如这一个 (我个人还没有尝试过,也无法为其提供担保)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42001948

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档