100分在线等,C#自定义控件怎么拥有独立的事件和方法
如图,当运行后点第一个自定义控件label1后,他的效果始终出现在最后一个。怎么让他效果在点哪个出现在哪个身上。在线等。自定义控件的属性能独立,事件不是。由于名字要传递,...
如图,当运行后点第一个自定义控件label1 后,他的效果始终出现在最后一个。怎么让他效果在点哪个出现在哪个身上。在线等。自定义控件的属性能独立,事件不是。由于名字要传递,label控件不能局部变量。
string name ="默认命名"; //全局变量,用于传递地址
label lblName= new Label(); //自定义label控件(接收地址)
lbel lblico = new label();//接收ico图片
private void lblIco_Click(object sender, EventArgs e) //点击事件
{ name=openfiledialog.ofdSource.FileName; //利用openfiledialog获取地址后传递给name变量
//通过点击ico图片,得到name变量的值更改lblname的text属性。}
然后问题来了,比如有3个自定义出来的控件
点第一个lblico控件(label1),地址每次都传递到最后一个lblname控件(label3)去了。
我要lblico(label1),lblname(label1).不要lblico(label1),lblname(label3)
----是通过lblico的事件改变lblname的text属性 展开
string name ="默认命名"; //全局变量,用于传递地址
label lblName= new Label(); //自定义label控件(接收地址)
lbel lblico = new label();//接收ico图片
private void lblIco_Click(object sender, EventArgs e) //点击事件
{ name=openfiledialog.ofdSource.FileName; //利用openfiledialog获取地址后传递给name变量
//通过点击ico图片,得到name变量的值更改lblname的text属性。}
然后问题来了,比如有3个自定义出来的控件
点第一个lblico控件(label1),地址每次都传递到最后一个lblname控件(label3)去了。
我要lblico(label1),lblname(label1).不要lblico(label1),lblname(label3)
----是通过lblico的事件改变lblname的text属性 展开
3个回答
展开全部
估计是你设置事件处理函数的地方有问题,事件其实是一个特别的类成员,对于实例化的对象来说事件与属性都是独立的,只是看设置什么事件处理函数给它们。像你可以给3个label都设置相同的处理函数,而处理函数里面写的只是改变第3个label的属性,就会出现你说的情况。
追问
不懂...那3个label是自定义生成的,我只是比方说先生成3个。
label.BackColor 属性能点哪个label 那个label变色,而通过name变量传递给label.text,只会到最后一个。求解决办法。让label.text=name。实现点哪个,哪个变
追答
请楼主把全部代码都贴出来,好让我们看清楚。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不是很明白楼主的意思,你说的是这样的嘛?
定义事件(简单点不用委托):public event System.EventHandler a;
触发: a(this,new EventArgs()); //传递本控件
使用:
public void label1_a(object sender,EventArgs e)
{
label1 = (label1)sender; //获取定义的控件
label1.Text = "Test"; //修改值
}
定义事件(简单点不用委托):public event System.EventHandler a;
触发: a(this,new EventArgs()); //传递本控件
使用:
public void label1_a(object sender,EventArgs e)
{
label1 = (label1)sender; //获取定义的控件
label1.Text = "Test"; //修改值
}
更多追问追答
追问
a(this,new EventArgs()); 报错 空指针异常 未将对象引用设置到对象的实例。
去了上面那句
label1 = (label1)sender; ()是要放类型吧? 这个早试过了,地址名字每次都到最后一个label
追答
看了上下楼和楼主的补充,明白了楼主的意思,这种不用自创事件都可以的:
string name ="默认命名"; //全局变量,用于传递地址
/*自定义label控件*/
private void lblIco_Click(object sender, EventArgs e) //点击事件
{
name=openfiledialog.ofdSource.FileName;
//利用openfiledialog获取地址后传递给name变量
((Label)sender).Text = name
//改变当前用户点击的label文本
}
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
委托 事件
追问
怎么委托事件? 我这刚学完一本书,还没教导这地步。书里也没有,感觉最主要的书中没有
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询