2016-09-27 110 views
0

我有一个面板控件,标签和文本框相邻。在某些翻译中,标签变得太长,我试图使用GetChildAtPoint来确定标签何时变得太长并适当缩短(我知道还有其他/更好的方法,但我的方法有点受限,因此选项)。GetChildAtPoint不尊重ZOrder

我检查的指标和标签是41,而文本框是0
我用panelControl.GetChildAtPoint(new Point(labelControl.Location.X + labelControl.Width, labelControl.Location.Y)),尝试确定如果标签太长或不是,但由于某些原因,上面的代码返回标签控件而不是文本框。

在调试,labelControl.Location = 566,305和textBoxControl.Location = 716,290的标签控制有202

宽度我已经看到了在其他情况下,这种方法的工作,不能在这里看不到任何差异,所以我很不确定为什么它在这种情况下不起作用。

回答

1

这似乎与你的代码没有问题,请添加一些测试,看看实际的大小和位置的变化在运行时

如:

var point = new Point(label1.Location.X + label1.Width, 
     label1.Location.Y); 
    var p2 = panel1.Controls[1].Location; 
    var ctrl = panel1.GetChildAtPoint(point); 
    if (ctrl is TextBox) 
    { 
     textBox1.Text = "Got TextBox"; 
    } 
    else if (ctrl is Label) 
    { 
     textBox1.Text = "Got Label"; 
    } 

    textBox1.Text += string.Format(" {0}:{1} {2}:{3}", point.X, point.Y, p2.X, p2.Y); 
+0

提供的值是从调试/运行。我不确定你还希望我提供什么? – Trent

+0

该地点是实际的数据权利?你还可以提供新Point的计算数据(labelControl.Location.X + labelControl.Width,labelControl.Location.Y) – zquanghoangz

+0

768,305(​​文本框宽度超过200) – Trent