簡體   English   中英

在從UserControl繼承的控件上以編程方式顯示工具提示

[英]Show Tooltip programatically on a control inheriting from UserControl

我有一個自UserControl類繼承的自定義控件。 它有一個ToolTip屬性,但是當鼠標拖到它上面時,我需要顯示它。

Tooltip.Show方法需要使用Control類型的第二個參數。 我不確定該如何處理。

任何想法/幫助表示贊賞。

SetToolTip()只需要被調用一次

class Foo : Form {
     ToolTip tooltip = new ToolTip();

     public Foo(){
          tooltip.SetToolTip(this, "This is a tooltip!"); 
          foreach(Control ctrl in this.Controls) {
                tooltip.SetToolTip(ctrl, "This is a tooltip!");
            }
     }
}

在構造函數中實例化您的工具提示,並在鼠標懸停事件上顯示它。

摘自Stackoverflow中Joseph的答案

public ToolTip tT { get; set; }

public ClassConstructor()
{
tT = new ToolTip();
}

private void MyControl_MouseHover(object sender, EventArgs e)
{
tT.Show("Why So Many Times?", this);
}

希望能幫助到你。

我自己需要這個,發現上面提供的部分解決方案可以改進。

基本上,您需要將所有適用的子控件的MouseHover事件設置為父UserControl的MouseHover。

這可以使用MyUserControl類構造函數中的以下代碼完成:

class MyUserControl:UserControl
{
   string strTooltip;
   public ToolTip toolTip
   {
    get;
    set;
   }

   public MyUserControl()
   {
     toolTip = new ToolTip();
     foreach(Control ctrl in this.Controls)
     {
      ctrl.MouseHover += new EventHandler(MyUserControl_MouseHover);
      ctrl.MouseLeave += new EventHandler(MyUserControl_MouseLeave);
     }
  }
  void MyUserControl_MouseLeave(object sender, EventArgs e)
  {
    toolTip.Hide(this);
  }

  void MyUserControl_MouseHover(object sender, EventArgs e)
  {
    toolTip.Show(strToolTip, this, PointToClient(MousePosition));
  }
}

請注意,我們使用PointToClient(MousePosition)將工具提示定位到用戶控件所在的位置。

否則,有時可能會導致工具提示顯示在屏幕上的任意位置。 希望這對某人有幫助! :)

今天我自己遇到了這個問題,並提出了這個相當簡單的解決方案。

將以下源文件添加到您的代碼庫中的某個位置(我將其放在ToolTipEx.cs文件中)

namespace System.Windows.Forms
{
    public static class ToolTipEx
    {
        private static void SetTipRecurse(ToolTip toolTip, Control control, string tip)
        {
            toolTip.SetToolTip(control, tip);

            foreach (Control child in control.Controls)
                SetTipRecurse(toolTip, child, tip);
        }

        public static void SetTooltip(this ToolTip toolTip, UserControl control, string tip)
        {
            SetTipRecurse(toolTip, control, tip);
        }
    }
}

如果它在另一個DLL中,請確保已引用該DLL。

然后,您要做的就是正常調用toolTip.SetToolTip(myControl, "some tip"); 編譯器將為您處理其余的工作。

因為該函數實質上將ToolTip.SetToolTip()方法擴展為具有簽名的方法

ToolTip(UserControl control, string tip);

在階層中比原始人更高

ToolTip(Control control, string tip);

當我們處理UserControl時,它將代替原始控件被調用。

新方法執行一個簡單的遞歸調用,以使所有子控件與父控件具有相同的工具提示。

此代碼假定在對SetToolTip進行調用之后,UserControl將不會再添加其他控件。

暫無
暫無

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

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