0

UserControlクラスから継承するカスタムコントロールがあります。ToolTipプロパティがありますが、マウスをドラッグしたときに表示する必要があります。

Tooltip.Showメソッドは、Control型の2番目の引数を想定していますどうしたらいいのかわからない。

任意のアイデア/ヘルプをいただければ幸いです。

4

4 に答える 4

1

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!");
            }
     }
}
于 2019-01-28T23:15:33.187 に答える
0

コンストラクターでツールチップをインスタンス化し、マウスホバーイベントに表示します。

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);
}

それが役に立てば幸い。

于 2012-12-03T08:23:51.147 に答える
0

今日、自分でこの問題にぶつかって、このかなり単純な解決策を思いつきました。

次のソース ファイルをコードベースのどこかに追加します (ファイル 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 に他のコントロールが追加されないことを前提としています。

于 2015-01-09T11:06:36.863 に答える
0

私はこれを自分で必要としており、上記の部分的な解決策を改善できることがわかりました。

基本的に、該当するすべての子コントロールの 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) を使用して、ユーザー コントロールがある場所にツールチップを配置していることに注意してください。

そうしないと、ツールチップが画面上のランダムな場所に表示されることがあります。これが誰かを助けることを願っています! :)

于 2014-03-14T07:01:34.617 に答える