簡體   English   中英

鼠標懸停時獲取控件名稱的通用方法?

[英]Generic method to get a control name when moused over?

我正在編寫一個正在使用其外觀功能的應用程序。 我想做的是允許用戶創建一個XML文檔,我的代碼將解析該XML文檔並設置表單上控件的屬性。 這是簡單的部分。 讓我着迷的是為用戶提供了一種方法,以最少的編碼/文檔工作來查找控件名稱/類型。

我的想法是提供一個工具提示,當他們將鼠標懸停在控件上時,它會顯示控件的名稱並顯示類型。 有人知道這樣做的方法嗎? 我在想類似Spy ++如何找到控件的方法,但我也想獲取.NET屬性。

如果有人有其他想法,我會敞開心ear。

非常感謝。

弄清楚了。 問題是因為鼠標位置與客戶端位置無關。 因此,下面的代碼將解決此問題。 我將其放在已經進行過的輪詢線程中,但它應與計時器或其他事件一起使用。 由於某些原因在MouseMove中不起作用。 謝謝大家的幫助。

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

您需要設置一些ToolTip對象(每個字段一個),循環瀏覽表單中的所有控件以獲取每個工具提示的文本。

http://msdn.microsoft.com/zh-CN/library/system.windows.forms.tooltip.aspx

您願意為每個控件的鼠標懸停事件注冊嗎? 如果是這樣,發件人就是類型,等等...也許我在這里遺漏了什么? 此外,您可以將控件從WPF / SL的可視樹中移出,為什么不移植到WPF?

您可以遞歸安裝OnMouseOver事件處理程序。 然后,如果發生OnMouseOver事件,則控件位於事件處理程序的sender參數中。

為什么不起作用? 我將其放在基本形式中,真的看不到在有問題的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);
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM