我在网上找了一段代码,放到form中,可以实现其直接子类的缩放拖拽,现在我把代码放到panel中,自己写了一个自定义panel,按道理panel中的直接子类也可以实现拖拽缩放,但是结果是不行的,没有效果,请问这是为什么。代码地址:
http://blog.csdn.net/knxw0001/article/details/8980071

解决方案 »

  1.   

    我看了代码,如果你只是照搬过去的话肯定不行。
    原因是:在构造函数中注册事件,此时,该Panel控件中还没有添加任何东西,所以,控件数为0,无法为后来添加的控件注册事件。解决方法:
    1.在自定义panel中注册并实现事件 ControlAdded,在该事件中注册那三个事件。
    2.自定义Panel中提供一个方法,该方法中遍历子控件并注册事件,在使用该自定义控件的类中调用该方法。还有,如果是所有子控件,需要递归遍历
      

  2.   

    for (int i = 0; i < this.Controls.Count; i++)  
    这个代码不行,它不能递归给Control的下一级的控件添加鼠标事件。你需要修改下。
      

  3.   


    this是panel,这些代码是添加到panel中的,也拿不到panel的子类数量吗?
      

  4.   

    ok,谢谢,我知道哪里错了。我写了一个自定义的panel,实现了移动拖拽的功能,其构造方法中也调用了为各子控件添加监听。然后,我又写了一个控件来继承自定义panel,这个控件中添加子控件,可是,执行时,先执行的父类的添加监听的方法,此时还没有添加控件,所以没有执行添加监听的操作。