简单描述:
我有个winform程序,有一个button1
private void button1_Click(object sender, EventArgs e) { MessageBox.Show("我是原有事件"); }
可以在界面中加另外一个按钮button2和一个textbox,在textbox中输入
private void button1_Click(object sender, EventArgs e) { MessageBox.Show("我是现在的事件"); }
如何点击button2后,再点击button1,弹出的是“我是现在的事件”?
也就是button2背后的代码怎么写才能实现动态注入代码和编译?
new button,textbox,初始化并绑定事件,然后添加到界面
这并不叫动态编译而叫动态生成
没明白,能写下代码么?
@梦回大唐吟诗篇: 点击button1生成button2和textbox吗
@jello chen: 不是啊。。。你仔细看下我放上去的两段代码,不一样啊。
我需要点击button1,弹出“我是原有事件”,点击button2后,再点击button1,button1绑定的方法变了,弹出“我是现在的事件”
@梦回大唐吟诗篇:
private void button1_Click(object sender, EventArgs e) { MessageBox.Show("我是原有事件"); } private void button2_Click(object sender, EventArgs e) { this.button1.Click -= this.button1_Click; this.button1.Click += (ss, ee) => MessageBox.Show("我是现在的事件"); }
@jello chen: 可以不用匿名函数么?因为我使用函数的名字,而且这个函数不能写在程序里,是需要充textbox里读取的。
private void buttonTest_Click(object sender, EventArgs e) { MessageBox.Show("我要写在textbox里"); }
上边这段代码是写在textbox里的,点击button2的时候,实现
this.button1.Click += new EventHandler(buttonTest_Click);
可以实现么?
@梦回大唐吟诗篇: 可以,但记住先移除掉之前挂接的委托
@Daniel Cai: 如何把从textbox读取的代码挂载上去呢?
我觉得楼上误解了楼主的意思,你这个,思路估计是这样。
1. 点击button2的时候,要获取textbox里的代码,并编译。
2. 编译完成后,dll存在某处,再用反射读取编译后的dll。
3. 获取dll里面的button1_click方法,并加载到button1的点击事件里。
比较麻烦。你如果只是想要改变弹出的消息内容的话,那就简单多了。