| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3295 人关注过本帖
标题:[求助]如何给动态生成的控件添加事件代码?
只看楼主 加入收藏
cobby
Rank: 1
等 级:新手上路
威 望:1
帖 子:565
专家分:0
注 册:2007-7-11
收藏
 问题点数:0 回复次数:10 
[求助]如何给动态生成的控件添加事件代码?
LinkLabel ll1 = new LinkLabel();
ll1.Links[0].LinkData = "www.163.com";
ll1.Text = "网易首页";
ll1.AutoSize=true;
ll1.Location=new Point(linkLabel1.Left,linkLabel1.Top+linkLabel1.Height+10);
tabPage3.Controls.Add(ll1);

通过如上代码我已经成功生成了一个链接标签,然而这个标签没有任何事件代码,比如单击后,希望打开网易首页。那么就需要动态注册它的LinkClicked事件,请问这个功能如何实现?谢谢!
搜索更多相关主题的帖子: 控件 动态 代码 
2007-09-19 14:47
jxnuwy04
Rank: 2
等 级:新手上路
威 望:4
帖 子:768
专家分:0
注 册:2006-9-15
收藏
得分:0 
在这个InitializeComponent()方法中加入"ll1.Click += new System.EventHandler(this.ll1_Click)",再写private void ll1_Click(object sender, System.EventArgs e)事件就可以了;

------------------不为别的,就为你,我的理想!-----------------
2007-09-19 15:05
cobby
Rank: 1
等 级:新手上路
威 望:1
帖 子:565
专家分:0
注 册:2007-7-11
收藏
得分:0 
这么说private void ll1_Click(object sender, System.EventArgs e)事件也是要事先写好的?可是我不确定会动态添加多少个控件,怎么能事先写事件代码呢?请指教!谢谢!

努力成为菜鸟!
2007-09-19 15:41
cobby
Rank: 1
等 级:新手上路
威 望:1
帖 子:565
专家分:0
注 册:2007-7-11
收藏
得分:0 
我试了下,系统报错说:

1、错误 1 当前上下文中不存在名称“ll1”
2、错误 2 “test.Form1”并不包含“ll1_Click”的定义

控件是程序运行时动态添加的,程序开发中并没有ll1,直接加那个定义语句估计不行吧

努力成为菜鸟!
2007-09-19 15:43
jxnuwy04
Rank: 2
等 级:新手上路
威 望:4
帖 子:768
专家分:0
注 册:2006-9-15
收藏
得分:0 
public void BindMethodToControlEvent(string controlID,string eventName,Delegate method)
{
FieldInfo conInfo = this.GetType().GetField(controlID,BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
if(conInfo != null)
{
object source = conInfo.GetValue(this);
EventInfo evInfo = source.GetType().GetEvent(eventName);
if(evInfo == null)
throw new Exception("无效事件名称");
evInfo.AddEventHandler(source,method);
}
else
throw new Exception("无效事件源!");
}
这个是刚从网上搜到的一段代码,自己也看的有点糊涂,发给你看看行不行.

------------------不为别的,就为你,我的理想!-----------------
2007-09-19 16:09
jxnuwy04
Rank: 2
等 级:新手上路
威 望:4
帖 子:768
专家分:0
注 册:2006-9-15
收藏
得分:0 
补充:三个参数:控件标识(ID),事件名称,事件委托

------------------不为别的,就为你,我的理想!-----------------
2007-09-19 16:14
cobby
Rank: 1
等 级:新手上路
威 望:1
帖 子:565
专家分:0
注 册:2007-7-11
收藏
得分:0 

看不懂呵。。。不过俺自己刚刚搞定。谢谢各位帮忙。我把源代码贴上来参考一下。

//添加一个链接标签
LinkLabel ll1 = new LinkLabel();
ll1.Links[0].LinkData = "http://www.163.com";
ll1.Text = "网易首页(动态生成控件)";
ll1.AutoSize=true;
ll1.Location=new Point(linkLabel1.Left,linkLabel1.Top+linkLabel1.Height+10);
tabPage3.Controls.Add(ll1);

//注册标签的三个事件
ll1.MouseLeave += new System.EventHandler(this.mouseLeave);
ll1.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.LinkClicked);
ll1.MouseEnter += new System.EventHandler(this.mouseEnter);


//自定义三个控件事件的方法
private void mouseEnter(object sender, EventArgs e)
{
toolStripStatusLabel1.Text = ((LinkLabel)sender).Links[0].LinkData.ToString();
}

private void mouseLeave(object sender, EventArgs e)
{
toolStripStatusLabel1.Text = "";
}

private void LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
System.Diagnostics.Process.Start(e.Link.LinkData.ToString());
}

这样就行了。


努力成为菜鸟!
2007-09-19 17:01
jxnuwy04
Rank: 2
等 级:新手上路
威 望:4
帖 子:768
专家分:0
注 册:2006-9-15
收藏
得分:0 
你这样能实现动态添加事件吗?LinkClicked事件是怎么触发的呢?

------------------不为别的,就为你,我的理想!-----------------
2007-09-19 17:08
cobby
Rank: 1
等 级:新手上路
威 望:1
帖 子:565
专家分:0
注 册:2007-7-11
收藏
得分:0 
当我点击链接标签就触发了呀。程序运行正常的。

努力成为菜鸟!
2007-09-19 20:29
virusswb
Rank: 1
等 级:新手上路
威 望:1
帖 子:342
专家分:0
注 册:2005-8-6
收藏
得分:0 
回复:(jxnuwy04)在这个InitializeComponent()方法中...
人家的控件是动态添加的
你得方法可以吗

jorden008@
2007-09-19 20:40
快速回复:[求助]如何给动态生成的控件添加事件代码?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.041303 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved