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

Кажется, нет проблем с кодом, пожалуйста, добавить некоторые тесты, чтобы увидеть на самом деле размер и изменение местоположения во время выполнения

Eg:

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

Местоположение - это фактические данные? Можете ли вы также предоставить расчетные данные новой точки (labelControl.Location.X + labelControl.Width, labelControl.Location.Y) – zquanghoangz

+0

768,305 (ширина текстового поля более 200) – Trent