GetChildAtPoint 不遵守 ZOrder

GetChildAtPoint is not honoring ZOrder

我有一个面板控件,标签和文本框彼此相邻。在某些翻译中,标签变得太长,我正在尝试使用 GetChildAtPoint 来确定标签何时变得太长并适当地缩短它(我知道有 other/better 方法,但我有点受限在我的方法中,因此这个选项)。

我检查了索引,标签是 41,而文本框是 0。
我使用 panelControl.GetChildAtPoint(new Point(labelControl.Location.X + labelControl.Width, labelControl.Location.Y)) 来尝试确定标签是否太长,但由于某些原因,上面的代码 returns 标签控件而不是文本框。

在调试中,labelControl.Location = 566、305 和 textBoxControl.Location = 716、290。标签控件的宽度为 202。

我已经看到这种方法在其他情况下有效,但在这里看不到任何差异,所以我真的不确定为什么它在这种情况下不起作用。

您的代码似乎没有问题,请添加一些测试以查看实际大小和位置在 运行 时间内的变化

例如:

    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);