form里有个panel,panle里有个button,请问怎么得到这个button在form里的坐标。彻底晕了。

解决方案 »

  1.   

    form1.PointToClient( panel1.PointToScreen(button1.Location) );
      

  2.   

    本帖最后由 bdmh 于 2011-08-04 13:06:07 编辑
      

  3.   

    一直在想一句完成的方法,看来是没有了。刚才吃饭的路上也突然想到了,各种包含关系的控件的坐标系统的唯一交流点,就是屏幕坐标。做什么事情,都得先转成屏幕坐标,然后再转到目标系统。因此那个通用函数应该这么写Point transform(源控件,源控件坐标系的坐标,目标控件)
    obj.PointToScreen的参数,没有文章去强调这个参数必须是obj坐标系统里的点坐标。obj.PointToScreen(p),好像不如 PointToScreen(obj,p)好理解,我这是怎么了。我突然又明白了,
    PointToScreen本就不应该是某个控件的方法,因为他返回的是跟这个控件没有任何关系的东西。
    请问我这么想正确吗?PointToScreen 应该放到一个类似叫Transform的类里作为static函数存在!!
    不是我的错,是 类库设计的错。哈哈。
    public Point PointToParent(Point value, Control parent)这种形式的函数,
    正是让我迷惑了好几个小时的东西。
      

  4.   

            public static Point Transform(Control srcCtrl, Point pointOfSrcCtrl, Control destCtrl)
            {
                // 把控件1坐标系中的点坐标转为屏幕坐标系的点坐标
                Point p1 = srcCtrl.PointToScreen(pointOfSrcCtrl);            // 把屏幕坐标系的点坐标转控件2坐标系中的点坐标
                Point p2 = destCtrl.PointToClient(p1);            return p2;
            }