首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

用户控件自定义事件的触发有关问题

2013-12-13 
用户控件自定义事件的触发问题本帖最后由 huge92 于 2013-12-08 20:51:03 编辑坛子上搜到关于用户自定义事

用户控件自定义事件的触发问题
本帖最后由 huge92 于 2013-12-08 20:51:03 编辑 坛子上搜到关于用户自定义事件触发的问题,我发现我也有同样的问题:
http://bbs.csdn.net/topics/340167855

比如一个输入到5个字就自动预警的对话框(先不考虑用事件来实现小题大做的问题= =)


    public partial class AutoTextBox : UserControl
    {
        public AutoTextBox()
        {
            InitializeComponent();
        }
 
        //省略...

        public delegate void AlertHandler(object sender, EventArgs e);
        public event AlertHandler Alert;

        protected virtual void OnAlertGoOff(EventArgs e)
        {
            if (Alert != null)
            {
                Alert(this,e);
            }
        }

        public void AlertGoOff()
        {
            if (this.TextLength >= 5)
            {
                EventArgs e = new EventArgs();
                OnAlertGoOff(e);
            }
        }
    }


然后,这个AlertGoOff()得给它找个地方引发了,不然事件效果就出不来。

而如果一般我们拖个Button到窗体上,比如就单击事件,这个引发方法我们是看不到的,但肯定也有地方把它引发了。

1.对于这个方法在哪里引发我一直都有疑问,我们自己写的AlertGoOff()可以放到其他已有控件的事件中去把它引发了,但是.NET已有的控件是上哪儿去引发的?它又没有已有的事件或者什么别的地方可用。
我觉得.NET Framework肯定有它一套消息传递机制,不知道我这么想对不对?这个消息传递机制让系统知道什么时候是点了一下,什么时候是按了一个键,所以就相应引发了类似AlertGoOff()的方法。

2.我们自己写用户控件的自定义事件的时候,怎么样像.NET Framework一样利用这样的消息机制呢?
比如窗体背景一变白就做XXX,
这个一变白:
White()
{
    if(主窗体背景一变白)
    ......
}
方法应该放到什么地方去引发呢?

3.那个帖子里有人说做成用户控件好像就不用手工触发了,原理和默认的button一样,这是在逗吗?

[解决办法]
不触发,就没效果,你想做一个变白提示,那么就在你设置颜色时触发,比如
this.color = color.white;
domyevent;
[解决办法]
wndproc中会处理消息,比如wm_click wm_char 等等
然后会触发对应的事件,click keypress 等等。
这个在winforms基类中实现

当然,真实的实现要复杂的多。
[解决办法]
如果是做控件,一般自定义的事件都需要依托windows的事件来触发!还有些可以通过属性访问器的赋值操作来触发!

热点排行