首页 新闻 会员 周边 捐助

C#代码动态编译

0
悬赏园豆:5 [待解决问题]

简单描述:

     我有个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背后的代码怎么写才能实现动态注入代码和编译?

梦回大唐吟诗篇的主页 梦回大唐吟诗篇 | 初学一级 | 园豆:144
提问于:2016-05-05 13:47
< >
分享
所有回答(2)
0

new button,textbox,初始化并绑定事件,然后添加到界面

这并不叫动态编译而叫动态生成

jello chen | 园豆:7336 (大侠五级) | 2016-05-05 13:53

  没明白,能写下代码么?

支持(0) 反对(0) 梦回大唐吟诗篇 | 园豆:144 (初学一级) | 2016-05-05 13:56

@梦回大唐吟诗篇: 点击button1生成button2和textbox吗

支持(0) 反对(0) jello chen | 园豆:7336 (大侠五级) | 2016-05-05 14:27

@jello chen: 不是啊。。。你仔细看下我放上去的两段代码,不一样啊。

我需要点击button1,弹出“我是原有事件”,点击button2后,再点击button1,button1绑定的方法变了,弹出“我是现在的事件”

支持(0) 反对(0) 梦回大唐吟诗篇 | 园豆:144 (初学一级) | 2016-05-05 14:31

@梦回大唐吟诗篇: 

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("我是现在的事件");
        }
支持(0) 反对(0) jello chen | 园豆:7336 (大侠五级) | 2016-05-05 14:38

@jello chen: 可以不用匿名函数么?因为我使用函数的名字,而且这个函数不能写在程序里,是需要充textbox里读取的。

        private void buttonTest_Click(object sender, EventArgs e)
        {
            MessageBox.Show("我要写在textbox里");
        }

上边这段代码是写在textbox里的,点击button2的时候,实现

this.button1.Click += new EventHandler(buttonTest_Click);

可以实现么?

支持(0) 反对(0) 梦回大唐吟诗篇 | 园豆:144 (初学一级) | 2016-05-05 19:27

@梦回大唐吟诗篇: 可以,但记住先移除掉之前挂接的委托

支持(0) 反对(0) Daniel Cai | 园豆:10424 (专家六级) | 2016-05-06 11:57

@Daniel Cai: 如何把从textbox读取的代码挂载上去呢?

支持(0) 反对(0) 梦回大唐吟诗篇 | 园豆:144 (初学一级) | 2016-05-06 16:29
0

我觉得楼上误解了楼主的意思,你这个,思路估计是这样。

1. 点击button2的时候,要获取textbox里的代码,并编译。

2. 编译完成后,dll存在某处,再用反射读取编译后的dll。

3. 获取dll里面的button1_click方法,并加载到button1的点击事件里。

 

比较麻烦。你如果只是想要改变弹出的消息内容的话,那就简单多了。

jmlsaul | 园豆:247 (菜鸟二级) | 2017-08-31 16:10
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册