UserControlクラスから継承するカスタムコントロールがあります。ToolTipプロパティがありますが、マウスをドラッグしたときに表示する必要があります。
Tooltip.Showメソッドは、Control型の2番目の引数を想定しています。どうしたらいいのかわからない。
任意のアイデア/ヘルプをいただければ幸いです。
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);
}
それが役に立てば幸い。
今日、自分でこの問題にぶつかって、このかなり単純な解決策を思いつきました。
次のソース ファイルをコードベースのどこかに追加します (ファイル 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 に他のコントロールが追加されないことを前提としています。
私はこれを自分で必要としており、上記の部分的な解決策を改善できることがわかりました。
基本的に、該当するすべての子コントロールの 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) を使用して、ユーザー コントロールがある場所にツールチップを配置していることに注意してください。
そうしないと、ツールチップが画面上のランダムな場所に表示されることがあります。これが誰かを助けることを願っています! :)