我正在编写一个应用程序,我正在为它设置皮肤功能。我想要做的是允许用户创建我的代码将解析的XML文档,并设置窗体上控件的属性。这是简单的部分。我遇到的问题是让用户找到控制名称/类型的方法,只需最少的编码/文档工作。
我的想法是有一个工具提示,当他们在控件上进行鼠标操作时,它会获得控件的名称和要显示的类型。有人知道这样做的方法吗?我在想Spy ++如何找到控件,但我也希望得到.NET属性。
如果有人有另一个想法,我会张开耳朵。
非常感谢。
答案 0 :(得分:1)
想出来。问题是因为鼠标位置与客户端位置无关。因此,下面的代码将解决此问题。我把它放在一个我已经去过的轮询线程中,但它应该与定时器或其他事件一起使用。但由于某种原因,在MouseMove中无效。谢谢大家的帮助。
Point p = this.PointToClient(MousePosition);
Control x = this.GetChildAtPoint(p);
if (x != null)
{
MessageBox.Show(x.GetType().ToString() + " - " + x.Name);
}
答案 1 :(得分:0)
您需要设置一些ToolTip个对象(每个字段一个),循环浏览表单中的所有控件以获取每个工具提示的文本。
http://msdn.microsoft.com/en-us/library/system.windows.forms.tooltip.aspx
答案 2 :(得分:0)
您是否愿意为每个控件鼠标注册事件?如果是这样,发件人将是类型等...也许我在这里遗漏了什么?此外,您可以从WPF / SL中的可视树中获取控件,为什么不移植到WPF?
答案 3 :(得分:0)
您可以递归安装OnMouseOver事件处理程序。然后,如果发生OnMouseOver事件,则控件位于事件处理程序的sender参数中。
答案 4 :(得分:0)
为什么这不起作用?我把它放在基本形式中,不要真正看到GetChildAtPoint旁边有什么不起作用。
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);
}