在拼装组件的时候(继承于其它组件,比如Button),有时候原有的那个组件(比如button)里的那个事件对象(就是那个e),里的东西可能很不够用,所以,我想用自定义事件类去替换掉原有的事件类,怎么做呢?我尝试的原码如下。public delegate void EventHandler(ArgsEvent e);
    [DefaultEvent("Click")]
    public partial class Component1 : Button
    {
        public new event EventHandler Click;
        public Component1()
        {
            InitializeComponent();
        }
    }    public class ArgsEvent : EventArgs
    {
        private int x;
        private int y;
        public ArgsEvent(int x, int y)
        {
            this.x = x;
            this.y = y;
        }
        public int X
        {
            get
            {
                return this.x;
            }
        }
        public int Y
        {
            get
            {
                return this.y;
            }
        }
    }这么做之后,好像事件类是被替换掉了,但是好像通知失效了,用户点了之后没有反应了
请高手们帮忙解决一下,最好在不调用WinApi的情况下解决。

解决方案 »

  1.   

    虽然用新的事件替换了旧的事件,但在你的代码中并没有触发这个事件,因此会感觉失效,按下面的方法就OK.    public delegate void EventHandler(ArgsEvent e) ; 
        [DefaultEvent("Click")] 
        public partial class Component1 : Button 
        { 
            public new event EventHandler Click; 
            public Component1() 
            { 
                InitializeComponent(); 
                base.Click += new System.EventHandler(myButton_Click);
            } 
            void myButton_Click(object sender, EventArgs e)
            {
                int x=0;            //x的值请自行赋值
                int y=0;            //y的值请自行赋值
                Click(new ArgsEvent(x, y));
            }    }     public class ArgsEvent : EventArgs 
        { 
            private int x; 
            private int y; 
            public ArgsEvent(int x, int y) 
            { 
                this.x = x; 
                this.y = y; 
            } 
            public int X 
            { 
                get 
                { 
                    return this.x; 
                } 
            } 
            public int Y 
            { 
                get 
                { 
                    return this.y; 
                } 
            } 
        } 
      

  2.   

    不行啊,在调用这个组件的时候,比如,把这个组件拖到面版上,在运行程序时,点击之后仍然没有反应,请高手继续指教。
    最好不要调用WinApi里的点击通知,只是把这个组件的点击事件通知,绑定到原有的事件通知上即可。
      

  3.   

    CSND上就没有会这个的高手了么?
      

  4.   


    private System.EventHandler proxy = new System.EventHandler(button_Click);public new event EventHandler Click
    {
        add
        {
            base.Events.AddHandler(this, this.proxy);
        }
        remove
        {
            base.Events.RemoveHandler(this, this.proxy);
        }
    }private static void button_Click(object sender, System.EventArgs e)
    {}
      

  5.   

    然后在button_Click里引发您的Click事件...
      

  6.   

    继承Button类,实现字节的Button在实现自己的点击事件,在内部封装并绑定。
      

  7.   

    to 楼主:
    我在二楼的发的代码,我测试过,OK的
      

  8.   

    最好用如下的办法在Component1 class 中触发Click事件:
            protected override void OnClick(EventArgs e)
            {
                if (this.Click != null)
                {
                    //Fire the click event here...
                }
            }