场景

c#中委托与事件的使用-以winform中跨窗体传值为例:

https://blog.csdn.net/badao_liumang_qizhi/article/details/100150700

参考上面的博客。

现在是在主页面点击按钮时弹出窗体,在窗体的load事件中进行事件的订阅,然后关闭窗体,再次打开时执行触发事件后,

订阅的事件就会执行两次,依次类推。

这是因为在窗体关闭的时候没有将原来的事件订阅解除掉。

注:

博客主页:

关注公众号
霸道的程序猿
获取编程相关电子书、教程推送与免费下载。

实现

点击主窗体按钮窗体显示。

frmcurvecompare curvecompare = new frmcurvecompare();
curvecompare.startposition = formstartposition.centerscreen;
//显示dialog
curvecompare.showdialog();

 

然后在窗体的load事件中

private void frmcurvecompare_load(object sender, eventargs e)
        {
           
            common.chartcompare.chartcomparehelper.onreloadselectdata += datatreelisthelper_onreloadselectdata;
            
        }

 

解决方案在窗体的关闭事件中解除订阅。

首先在属性中找到窗体关闭事件

 

 

添加如下代码:

 private void frmcurvecompare_formclosing(object sender, formclosingeventargs e)
        {
            common.chartcompare.chartcomparehelper.onreloadselectdata -= datatreelisthelper_onreloadselectdata;
           
        }