自定义控件的事件问题

时间:2022-08-31 07:49:21
自定义了一个控件 MyControl
该控件中间包含一个labTitle(label控件) 
MyControl控件有MouseDown事件 
labTitle也有个MouseDown事件
我想在触发labTitle.MouseDown事件时 去触发MyControl.MouseDown事件 
其实就类似于屏蔽掉labTitle.MouseDown事件 
请问各位大侠 这样的代码怎么去实现这个效果
我在MyContril控件的构造函数中写的 
labTitle.MouseDown += new MouseEventHandler(this.MouseDown);
但提示语法错误  请各位大侠指教下 谢谢!!

13 个解决方案

#1


提示什么错误   this.MouseDown怎么定义的

#2


我用的是Vs2010 提示this.MouseDown 只能在 +=或 -=的左边

#3


 private void  CMouseDown(object sender, System.Windows.Forms.MouseEventArgs e) 
{
}
labTitle.MouseDown += new MouseEventHandler(this.CMouseDown);


#4


我也这么试过 但是不行 这样是不报语法错误了 
但是这样
在触发控件中的 labTitle.MouseDown事件的时候
并没有触发在窗体上得 MyControl.MouseDow自身的事件

#5


其实是这样的 label控件遮住了部分父容器,当父容器即 MyControl.MouseDown事件触发时 如果鼠标停留在labTitle控件的上方
那么会触发 labTitle.MouseDown事件
而不会去触发MyControl.MouseDown事件
而我是想把labTitle.MouseDown事件屏蔽掉 即便鼠标停留在labTitle控件的上方 也触发MyControl.MouseDown事件

#6


labTitle.MouseDown += (s, e) => this.OnMouseDown(e);

#7


窗体的点击事件是什么

方法 签名类似 private void CMouseDown(object sender, System.Windows.Forms.MouseEventArgs e)  

#8


该回复于2011-11-14 10:48:43被版主删除

#9


它们的方法签名应该是一样的,直接将

窗体的点击事件的方法句柄给 labTitle 就行。

#10


 

public MyControl()
        {
            InitializeComponent();
            this.panel1.MouseDown += new MouseEventHandler(Panel_MouseDown);
            this.label1.MouseDown += new MouseEventHandler(Lable_MouseDown);
        }

//事件所需的委托
        public delegate void MouseDownEventHandler(object sender, MouseDownEventArgs e);

        //当文本改变时触发事件 定义一个MouseDown事件
        public event MouseDownEventHandler MouseDown;

        protected virtual void OnMouseDown(MouseDownEventArgs e)
        {
            //事件触发方法
            if (MouseDown != null)
            {//判断事件是否为空
                MouseDown(this, e);//触发事件
            }
        }

        //lable事件
        public void Lable_MouseDown(object sender, EventArgs e)
        {
            Label l = sender as Label;
            if (l != null)
            {
                hatchColor =l.BackColor;
                panel1.BackColor = hatchColor;
                OnMouseDown(new MouseDownEventArgs(hatchColor));//颜色改变触发事件
            }
        }

        //panel事件
        public void Panel_MouseDown(object sender, EventArgs e)
        {
            Panel p = sender as Panel;
            if (p != null)
            {
                hatchColor = p.BackColor;
                panel1.BackColor = hatchColor;
                OnMouseDown(new MouseDownEventArgs(hatchColor));//颜色改变触发事件
            }
        }

是否看懂了...

#11


该回复于2011-11-16 13:00:49被版主删除

#12


labTitle.MouseDown += new MouseEventHandler(this.MouseDown);
this.MouseDown这个应该写成一个方法,让控件调用,这里this是不能写的

#13


通常我的办法是根据鼠标的坐标来判断的,如果鼠标在那个子控件的范围内,就执行你的事件

#1


提示什么错误   this.MouseDown怎么定义的

#2


我用的是Vs2010 提示this.MouseDown 只能在 +=或 -=的左边

#3


 private void  CMouseDown(object sender, System.Windows.Forms.MouseEventArgs e) 
{
}
labTitle.MouseDown += new MouseEventHandler(this.CMouseDown);


#4


我也这么试过 但是不行 这样是不报语法错误了 
但是这样
在触发控件中的 labTitle.MouseDown事件的时候
并没有触发在窗体上得 MyControl.MouseDow自身的事件

#5


其实是这样的 label控件遮住了部分父容器,当父容器即 MyControl.MouseDown事件触发时 如果鼠标停留在labTitle控件的上方
那么会触发 labTitle.MouseDown事件
而不会去触发MyControl.MouseDown事件
而我是想把labTitle.MouseDown事件屏蔽掉 即便鼠标停留在labTitle控件的上方 也触发MyControl.MouseDown事件

#6


labTitle.MouseDown += (s, e) => this.OnMouseDown(e);

#7


窗体的点击事件是什么

方法 签名类似 private void CMouseDown(object sender, System.Windows.Forms.MouseEventArgs e)  

#8


该回复于2011-11-14 10:48:43被版主删除

#9


它们的方法签名应该是一样的,直接将

窗体的点击事件的方法句柄给 labTitle 就行。

#10


 

public MyControl()
        {
            InitializeComponent();
            this.panel1.MouseDown += new MouseEventHandler(Panel_MouseDown);
            this.label1.MouseDown += new MouseEventHandler(Lable_MouseDown);
        }

//事件所需的委托
        public delegate void MouseDownEventHandler(object sender, MouseDownEventArgs e);

        //当文本改变时触发事件 定义一个MouseDown事件
        public event MouseDownEventHandler MouseDown;

        protected virtual void OnMouseDown(MouseDownEventArgs e)
        {
            //事件触发方法
            if (MouseDown != null)
            {//判断事件是否为空
                MouseDown(this, e);//触发事件
            }
        }

        //lable事件
        public void Lable_MouseDown(object sender, EventArgs e)
        {
            Label l = sender as Label;
            if (l != null)
            {
                hatchColor =l.BackColor;
                panel1.BackColor = hatchColor;
                OnMouseDown(new MouseDownEventArgs(hatchColor));//颜色改变触发事件
            }
        }

        //panel事件
        public void Panel_MouseDown(object sender, EventArgs e)
        {
            Panel p = sender as Panel;
            if (p != null)
            {
                hatchColor = p.BackColor;
                panel1.BackColor = hatchColor;
                OnMouseDown(new MouseDownEventArgs(hatchColor));//颜色改变触发事件
            }
        }

是否看懂了...

#11


该回复于2011-11-16 13:00:49被版主删除

#12


labTitle.MouseDown += new MouseEventHandler(this.MouseDown);
this.MouseDown这个应该写成一个方法,让控件调用,这里this是不能写的

#13


通常我的办法是根据鼠标的坐标来判断的,如果鼠标在那个子控件的范围内,就执行你的事件