首页 新闻 会员 周边

通过反射特性根据数据表生成点击事件的问题

0
悬赏园豆:10 [已解决问题] 解决于 2014-08-21 22:44
Assembly assembly = Assembly.LoadFile(Application.StartupPath + "\\myapp.exe");
object newForm = assembly.CreateInstance(UserNavBarItem.menuEvent);
                        if (newForm != null)
                        {
                            newItem.LinkClicked += (sender, e) => PublicService.OpenForm((Form)newForm, this);
                        }
 
newItem.LinkClicked += (sender, e) => PublicService.OpenForm((Form)newForm, this)事件只能在第一次点击时成功,关闭窗口后再次点击提示打开已成不存在的对象。
请问这种方法该如何处理。
wlj78的主页 wlj78 | 初学一级 | 园豆:162
提问于:2014-08-12 18:45
< >
分享
最佳答案
0

这种情况经常会发生的,因为在newForm存在的情况下,加了newItem的LiinkClicked事件,

但等到newForm已经被关闭的时候,这个事件依然是存在的,这时候,你不经判断就去使用PublicService.OpenForm((Form)newForm,this);肯定会出错的。

有N种方法可以避免,一种是你在LinkClicked事件中再判断一下,如果newForm is null,直接跳出。

或者你也可以在PublicService.OpenForm这里面进行判断,PublicService.OpenForm((Form)newForm, this);这样写感觉有点不舒服,

PublicService.OpenForm(newForm, this);这样会好一点。当然,见仁见智。

另外的,就是在newForm关闭或是销毁事件中,注销newItem.LinkClicked事件的Handler。

收获园豆:5
爱编程的大叔 | 高人七级 |园豆:30839 | 2014-08-13 10:31

解决的思路正如您所说,先判断再进行!

wlj78 | 园豆:162 (初学一级) | 2014-08-21 22:43
其他回答(1)
0

newForm关闭后就已经销毁了,你要再运行一次 assembly.CreateInstance(UserNavBarItem.menuEvent) 才行呀。

收获园豆:5
XiaoFaye | 园豆:3087 (老鸟四级) | 2014-08-13 04:42

问题是如此,已解决,谢谢提醒!

支持(0) 反对(0) wlj78 | 园豆:162 (初学一级) | 2014-08-21 22:43
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册