检查button和lable是否在同一容器中,top取的是相对容易的高度差

解决方案 »

  1.   

    我获取了窗体的每一个top,应该是没有误差的。如果不能用等号的话,那应该怎么去判断他们在同一行的时候,把同行的所有label变为红色?  真的好纠结!
      

  2.   


    foreach (object m in this.Controls)
                {
                    if (m is Button)
                    {
                        foreach (object n in this.Controls)
                        {
                            if (n is Label)
                            {
                                if (System.Math.Abs(((Button)m).Top - ((Label)n).Top) <= 10)
                                {
                                    ((Label)n).BackColor = Color.Red;
                                }
                            }
                        }
                     }
                    
                }看看是不是有误差!
      

  3.   

    用top获取控件比较,还要考虑边框等,差一点都不行的
      

  4.   

    鼠标的按下、拖动、释放三个事件应收在按下时就记录同行控件,拖动后肯定就不一样了,另外同行?顶部相同(含误差)和中间都在一条线上(含误差),仅Top是不够的,应该要算出每个控件的中心坐标是不是在一条线上(含误差)。
      

  5.   

    Math.Abs((A.Top + A.Height / 2)  -  (B.Top + B.Height / 2)) <= 10 || Math.Abs(A.Top - B.Top)  <= 10
      

  6.   

    已经解决了。不过楼上说,我的代码可以运行,好像真的不行。top真的不能比较等号把。我用的就是 if (System.Math.Abs(((Button)m).Top - ((Label)n).Top) <= 10)
                                {
                                    ((Label)n).BackColor = Color.Red;
                                }才解决的