当鼠标放在表单上时,我正在寻找获取表单名称的技巧。假设我有一个 mdi 表单和许多 sdi 表单,例如 form1、form2、form3,并且所有 sdi 表单都已打开。假设我在 form1 上运行了一个计时器,它将定期运行。当鼠标放在任何 SDI 表单窗口上时,我想在 form1 的标签上显示来自计时器滴答事件的表单名称。
这种方式我尝试做到这一点。这是代码
private void timer1_Tick(object sender, EventArgs e) {
var handle = WindowFromPoint(Cursor.Position);
if (handle != IntPtr.Zero) {
var ctl = Control.FromHandle(handle);
if (ctl != null) {
label1.Text = ctl.Name;
return;
}
}
label1.Text = "None";
}
[System.Runtime.InteropServices.DllImport("user32.dll")]
private static extern IntPtr WindowFromPoint(Point pos);
上面的代码运行完美,但有一些小故障。当我将鼠标放在 MDI 表单或 Form1 上时,表单名称会显示在 form1 上,但是当我将鼠标放在 Form2 或 Form2 上时,它们的名称不会显示。我无法理解这段代码中有什么问题。请指导我修复它。