C# 怎么给类增加自定义事件?
比如我自己添加了一个类里面有一些属性,比如Text怎么注册TextChange这个事件?不要跟我说在属性的set和get中添加相关的方法啊..我是说注册事件我说的是自定义...
比如我自己添加了一个类
里面有一些属性,比如Text
怎么注册TextChange这个事件?
不要跟我说在属性的set和get中添加相关的方法啊..
我是说注册事件
我说的是自定义类 不是控件
谢谢楼下几位的回答,这个委托的方式我在书上也见过
但是还是要在Text属性的get和set中添加onEventName来调用吗?那还要事件干嘛呢,不是直接写一个方法在get和set中调用算了吗?
3楼的解释我能理解
看来
我是理解错了事件的含义
我以为事件就是让 某个方法 "自动运行"的
但是我还是有一些不明白,如果仅仅是为了外部引用,不能直接使用委托吗
而要使用委托+事件的方案,相比单纯的委托好处在哪儿呢? 展开
里面有一些属性,比如Text
怎么注册TextChange这个事件?
不要跟我说在属性的set和get中添加相关的方法啊..
我是说注册事件
我说的是自定义类 不是控件
谢谢楼下几位的回答,这个委托的方式我在书上也见过
但是还是要在Text属性的get和set中添加onEventName来调用吗?那还要事件干嘛呢,不是直接写一个方法在get和set中调用算了吗?
3楼的解释我能理解
看来
我是理解错了事件的含义
我以为事件就是让 某个方法 "自动运行"的
但是我还是有一些不明白,如果仅仅是为了外部引用,不能直接使用委托吗
而要使用委托+事件的方案,相比单纯的委托好处在哪儿呢? 展开
4个回答
展开全部
使用委托+事件来实现
如
public delegate void TextChangeHandler(object sender, EventArgs e);
public event TextChangeHandler TextChanged;
然后在你需要触发的事件中,检查
TextChanged是否为null,不为null的话直接执行TextChanged就行了。。。
如果你硬要在设置属性中执行事件
public string kk
{
get
{
//如果旧值 != 新值,触发事件
if (TextChanged != null)
{
TextChanged(null,EventArgs.Empty);
}
}
}
一般web的自定义控件触发TextChanged都在postdata数据回传的时候...
你要明白,你想在get中写个方法,则该方法只能作用于你这个控件的内部成员。。。。
如
public delegate void TextChangeHandler(object sender, EventArgs e);
public event TextChangeHandler TextChanged;
然后在你需要触发的事件中,检查
TextChanged是否为null,不为null的话直接执行TextChanged就行了。。。
如果你硬要在设置属性中执行事件
public string kk
{
get
{
//如果旧值 != 新值,触发事件
if (TextChanged != null)
{
TextChanged(null,EventArgs.Empty);
}
}
}
一般web的自定义控件触发TextChanged都在postdata数据回传的时候...
你要明白,你想在get中写个方法,则该方法只能作用于你这个控件的内部成员。。。。
展开全部
你用vs来写啊。。。直接双击控件就可以...vs自动为你实现注册...你只要写响应代码就可以了...
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
谢谢楼下几位的回答,这个委托的方式我在书上也见过
但是还是要在Text属性的get和set中添加onEventName来调用吗?那还要事件干嘛呢,不是直接写一个方法在get和set中调用算了吗?
回答你这几句,你还没有明白委托的含义。三楼是正确的,你认真看一下代码,然后自己再用一下。用事件是为了以后的扩展,慢慢理解吧。
但是还是要在Text属性的get和set中添加onEventName来调用吗?那还要事件干嘛呢,不是直接写一个方法在get和set中调用算了吗?
回答你这几句,你还没有明白委托的含义。三楼是正确的,你认真看一下代码,然后自己再用一下。用事件是为了以后的扩展,慢慢理解吧。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
定义委托。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询