Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 鼠标悬停时获取控件名称的通用方法?_C#_Winforms_Reflection - Fatal编程技术网

C# 鼠标悬停时获取控件名称的通用方法?

C# 鼠标悬停时获取控件名称的通用方法?,c#,winforms,reflection,C#,Winforms,Reflection,我正在编写一个应用程序,我正在为它开发一个蒙皮功能。我想做的是允许用户创建一个XML文档,我的代码将解析该文档,并设置表单上控件的属性。这是最简单的部分。我遇到的困难是,让用户能够用最少的编码/文档工作找到控件名称/类型 我的想法是有一个工具提示,当他们将鼠标移到控件上时,它会得到要显示的控件名称和类型。有人知道这样做的方法吗?我在想Spy++如何找到控件,但我也想获得.NET属性 如果有人有别的想法,我会洗耳恭听 非常感谢。您需要设置一些对象(每个字段一个),在表单中的所有控件之间循环以获取每

我正在编写一个应用程序,我正在为它开发一个蒙皮功能。我想做的是允许用户创建一个XML文档,我的代码将解析该文档,并设置表单上控件的属性。这是最简单的部分。我遇到的困难是,让用户能够用最少的编码/文档工作找到控件名称/类型

我的想法是有一个工具提示,当他们将鼠标移到控件上时,它会得到要显示的控件名称和类型。有人知道这样做的方法吗?我在想Spy++如何找到控件,但我也想获得.NET属性

如果有人有别的想法,我会洗耳恭听


非常感谢。

您需要设置一些对象(每个字段一个),在表单中的所有控件之间循环以获取每个工具提示的文本


您愿意为每个控件鼠标悬停事件注册吗?如果是这样的话,发送者就是那种类型,等等……也许我这里遗漏了什么?此外,您可以从WPF/SL中的可视化树中获取控件,为什么不将其移植到WPF?

您可以递归地安装OnMouseOver事件处理程序。然后,如果发生OnMouseOver事件,则控件位于事件处理程序的sender参数中。

为什么不起作用?我把它放在基本形式上,不太明白除了GetChildAtPoint是buggy之外还有什么不起作用

    protected override void OnMouseMove(MouseEventArgs e)
    {
        Control c = this.GetChildAtPoint(e.Location);
        if (c != null)
        {
            MessageBox.Show(String.Format("Your control name is: {0} and type is {1}.", c.Name, c.GetType().ToString()));
        }
        base.OnMouseMove(e);
    }

我明白了。问题是因为鼠标位置与客户端位置不相关。因此,下面的代码将解决此问题。我把它放在一个我已经准备好的轮询线程中,但它应该与计时器或其他事件一起工作。但由于某种原因,在MouseMove中不起作用。谢谢大家的帮助

                Point p = this.PointToClient(MousePosition);
                Control x = this.GetChildAtPoint(p);
                if (x != null)
                {
                    MessageBox.Show(x.GetType().ToString() + " - " + x.Name);
                }

这不是我想要的答案,但我想那会管用的。我在想Control.GetChildAtPoint之类的东西,但它总是返回null。更糟糕的情况是,我认为运行时添加每个控件(meh..)和添加工具提示属性会起作用。稍后我会标为答案,但我真的想看看是否有更好的方法。