2016-09-27 88 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