首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FormClosing委托事件问题

FormClosing委托事件问题
EN

Stack Overflow用户
提问于 2011-04-11 14:11:11
回答 2查看 874关注 0票数 1

我有两个表单,名为'mainForm‘和'addRslt’。当用户单击mainForm中的一个按钮时,addRslt表单将显示(),然后用户将填充一个TreeView。现在,当用户想关闭这个addRslt表单时,程序将相反地隐藏()表单(使用e.Cancel = true; ),因此如果用户重新打开该表单,他/她可以向TreeView添加更多内容。

在我的mainForm中,我有一个按钮来显示这个addRslt表单,而且在这个按钮的单击代码中,还有我的FormClosing委托程序,它将检测addRslt表单中的TreeView内容并将其复制到mainForm中的TreeView中。

现在的问题是,我希望检查重复的节点,而不将它们添加到TreeView中的mainForm中。这样做是正确的,但我也有一个消息框,它告诉用户程序没有添加现有节点!到现在为止还可以。但是问题是每次我这么做的时候,这个消息盒就会出现N+1时间!我是说,如果我第一次这么做,这个消息框会出现2次,等等.

这是我的密码!抱歉,长话短说!

代码语言:javascript
复制
    private void menuFileAddTestResults_Click(object sender, EventArgs e)
    {
        addRslt.Show();

        addRslt.FormClosing += delegate
        {
            foreach (TreeNode node in addRslt.treeViewSelectedFiles.Nodes)
            {
                TreeNode newNode = new TreeNode();
                newNode.Text = node.Text;
                newNode.Name = node.Name;
                newNode.Tag = node.Tag;

                if (!treeViewTestFiles.Nodes.ContainsKey(node.Name))
                {
                    treeViewTestFiles.Nodes.Add(newNode);
                }
                else
                {
                    countExist++;
                }
            }

            if (countExist > 0)
            {
                MessageBox.Show(countExist.ToString() + " Test files are already exist in the list!");
            }

            countExist = 0;
        };
    }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-04-11 14:18:04

每次显示时都要添加一个FormClosing处理程序。在设置表单的其余部分时,只需添加一次。(就我个人而言,我可能会把它分成一个单独的方法.我不认为它特别适合使用lambda表达式--它是一个相当大的代码块,它不引用包含方法中声明的任何变量,因此没有真正的好处。)

票数 1
EN

Stack Overflow用户

发布于 2011-04-11 14:26:55

看起来您正在重复地将内联实现添加到多播委托中。

很明显这不是你的意图。按照Jon的建议,您要么需要订阅委托的一个实例,要么每次都需要管理委托。

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

https://stackoverflow.com/questions/5622528

复制
相关文章

相似问题

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