读书人

自定义控件的事件有关问题

发布时间: 2013-06-26 14:29:32 作者: rapoo

自定义控件的事件问题
自定义了一个控件 MyControl
该控件中间包含一个labTitle(label控件)
MyControl控件有MouseDown事件
labTitle也有个MouseDown事件
我想在触发labTitle.MouseDown事件时 去触发MyControl.MouseDown事件
其实就类似于屏蔽掉labTitle.MouseDown事件
请问各位大侠 这样的代码怎么去实现这个效果
我在MyContril控件的构造函数中写的
labTitle.MouseDown += new MouseEventHandler(this.MouseDown);
但提示语法错误 请各位大侠指教下 谢谢!!
[解决办法]
提示什么错误 this.MouseDown怎么定义的
[解决办法]
private void CMouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
}
labTitle.MouseDown += new MouseEventHandler(this.CMouseDown);



[解决办法]
labTitle.MouseDown += (s, e) => this.OnMouseDown(e);

[解决办法]
窗体的点击事件是什么

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


[解决办法]
它们的方法签名应该是一样的,直接将

窗体的点击事件的方法句柄给 labTitle 就行。
[解决办法]


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));//颜色改变触发事件
}
}

是否看懂了...
[解决办法]
labTitle.MouseDown += new MouseEventHandler(this.MouseDown);
this.MouseDown这个应该写成一个方法,让控件调用,这里this是不能写的

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

读书人网 >.NET

热点推荐