gpt4 book ai didi

c# - 当鼠标位于任何 SDI 窗体上时如何检测窗体名称

转载 作者:太空狗 更新时间:2023-10-29 23:46:39 25 4
gpt4 key购买 nike

我正在寻找当鼠标放在表单上时获取表单名称的技巧。假设我有一个 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 上时,它们的名称不会显示。我无法理解这段代码中的问题所在。请指导我修复它。

最佳答案

既然你有控制权,我想你只需要使用FindForm()函数:

var ctl = Control.FromHandle(handle);
if (ctl != null) {
var form = ctrl.FindForm();
if (form != null) {
label1.Text = form.Name;
}
}

关于c# - 当鼠标位于任何 SDI 窗体上时如何检测窗体名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15341131/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com