我的自定义控件需要处理MouseDown、MouseMove事件,可自定义控件里有很多其他Label之类的控件。怎样让内部控件的MouseDown、MouseMove事

时间:2021-12-24 20:27:50
我试着
public event MouseEventHandler MouseDown;
private void label1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
    this.MouseDown(sender,e);
}


引用此自定义控件的程序里:
private void myCtl_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
    MyCtl TargetMyCtl = (MyCtl)sender;
    StartPoint = new Point(e.X,e.Y);

    textBox1.Text = TargetMyCtl.我的自定义属性 + " "  + "Clicked";
}

引用控件的程序如果鼠标在控件的空白处点击鼠标时没有问题,可如果在控件中的label范围内点击,送出的sender不是自定义控件本身,而是label,产生不能转换为MyCtl对象的错误。

这段代码应该怎样写?如果自定义控件中有GroupBox之类不存在MouseDown、MouseMove事件的控件该怎么办?MouseDown的时间参数e有X、Y属性,我希望在内部控件中MouseDown、MouseMove之后,外部引用的程序收到的是相对于自定义控件左上角的XY坐标。
写了很多,各位能看懂吗?请指点!谢谢!

8 个解决方案

#1


真的这么难吗?不会不可能吧?

#2


private void label1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
    this.MouseDown( this ,e);
}

#3


谢谢解答!
我有试过this.MouseDown( this ,e)的,不行。

#4


啊~~~~~~~~~~~~~~~~~~~

大哥,你想干什么?

直接继承ctrl CLASS 不就可以了吗!

#5


谢谢 lkal4587(刘侃 LuxuRy Lab) 参与解答。你是说自定义控件的类写成:
public class MyControl : System.Windows.Forms.UserControl
吗?
当然是这样写的。

不过如果这个自定义控件中有一个label的话,在引用这个控件的工程中,鼠标在label范围内电击的话,不能激活自定义控件自身的MouseDown!你可以试验一下。

#6


哪位还有办法吗?

#7


啊~~~~~~~~~~~~~~~

看看MSDN上关于“引发时间”的things !

#8


再加50分。那位能帮我贴出代码?200分相送!决不失言!

#1


真的这么难吗?不会不可能吧?

#2


private void label1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
    this.MouseDown( this ,e);
}

#3


谢谢解答!
我有试过this.MouseDown( this ,e)的,不行。

#4


啊~~~~~~~~~~~~~~~~~~~

大哥,你想干什么?

直接继承ctrl CLASS 不就可以了吗!

#5


谢谢 lkal4587(刘侃 LuxuRy Lab) 参与解答。你是说自定义控件的类写成:
public class MyControl : System.Windows.Forms.UserControl
吗?
当然是这样写的。

不过如果这个自定义控件中有一个label的话,在引用这个控件的工程中,鼠标在label范围内电击的话,不能激活自定义控件自身的MouseDown!你可以试验一下。

#6


哪位还有办法吗?

#7


啊~~~~~~~~~~~~~~~

看看MSDN上关于“引发时间”的things !

#8


再加50分。那位能帮我贴出代码?200分相送!决不失言!