日期:2014-05-17  浏览次数:20713 次

用户控件自定义事件的触发问题
本帖最后由 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一样,这是在逗吗?

水晶报表 输出下上标有关问题