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);
我有一个面板控件,标签和文本框彼此相邻。在某些翻译中,标签变得太长,我正在尝试使用 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);