CheckedListBoxアイテムのツールチップ?
-
03-07-2019 - |
質問
ユーザーのマウスがCheckedListBoxのアイテムの上に置かれたときにツールチップに表示される追加のテキストを設定する簡単な方法はありますか?
コードでできることを期待するとは:
uiChkLstTables.DisplayOnHoverMember = "DisplayOnHoverProperty"; //Property contains extended details
誰かがこれを行う正しい方向に私を向けることができますか?マウスが現在どのアイテムの上にあるかを検出し、新しいツールチップインスタンスを作成することを含む記事を既にいくつか見つけましたが、これは最善の方法とは思えないほど少々不自然に聞こえます。
事前に感謝します。
解決
フォームにTooltipオブジェクトを追加してから、ShowToolTip()メソッドを呼び出すCheckedListBox.MouseHoverのイベントハンドラーを追加します。 次のコードを持つCheckedListBoxのMouseMoveイベントを追加します。
//Make ttIndex a global integer variable to store index of item currently showing tooltip.
//Check if current location is different from item having tooltip, if so call method
if (ttIndex != checkedListBox1.IndexFromPoint(e.Location))
ShowToolTip();
次にShowToolTipメソッドを作成します:
private void ShowToolTip()
{
ttIndex = checkedListBox1.IndexFromPoint(checkedListBox1.PointToClient(MousePosition));
if (ttIndex > -1)
{
Point p = PointToClient(MousePosition);
toolTip1.ToolTipTitle = "Tooltip Title";
toolTip1.SetToolTip(checkedListBox1, checkedListBox1.Items[ttIndex].ToString());
}
}
他のヒント
代わりに、 ListViewを使用することもできます。
代わりにチェックボックスを使用します。このコントロールには
組み込み ツールチップのサポート。
不自然かどうか。それがあります...
すでに説明したよりも簡単な方法を知りません(ただし、常に新規作成するのではなく、おそらくツールチップインスタンスを再利用するでしょう)。これを示す記事がある場合は、それらを使用するか、これをネイティブにサポートするサードパーティのコントロールを使用します(気にしないでください)。
Ferminのすばらしいソリューションをもう少し明確にするために、Ferminの答えを拡張したいと思います。
作業中のフォーム(おそらく.Designer.csファイル内)で、MouseMoveイベントハンドラーをCheckedListBoxに追加する必要があります(Ferminは当初MouseHoverイベントハンドラーを提案しましたが、これは機能しませんでした) )。
this.checkedListBox.MouseMove += new System.Windows.Forms.MouseEventHandler(this.showCheckBoxToolTip);
次に、フォームに2つのクラス属性ToolTipオブジェクトと整数を追加して、ツールヒントが表示された最後のチェックボックスを追跡します
private ToolTip toolTip1;
private int toolTipIndex;
最後に、showCheckBoxToolTip()メソッドを実装する必要があります。このメソッドはFerminの答えに非常に似ていますが、イベントコールバックメソッドとShowToolTip()メソッドを組み合わせた点が異なります。また、メソッドパラメータの1つがMouseEventArgsであることに注意してください。これは、MouseMove属性にMouseEventHandlerが必要であり、MouseEventHandlerがMouseEventArgsを提供するためです。
private void showCheckBoxToolTip(object sender, MouseEventArgs e)
{
if (toolTipIndex != this.checkedListBox.IndexFromPoint(e.Location))
{
toolTipIndex = checkedListBox.IndexFromPoint(checkedListBox.PointToClient(MousePosition));
if (toolTipIndex > -1)
{
toolTip1.SetToolTip(checkedListBox, checkedListBox.Items[toolTipIndex].ToString());
}
}
}
アイテムのチェックボックスリストでリストアイテムを実行し、適切なテキストをアイテムの「タイトル」属性として設定すると、ホバー時に表示されます...
foreach (ListItem item in checkBoxList.Items)
{
//Find your item here...maybe a switch statement or
//a bunch of if()'s
if(item.Value.ToString() == "item 1")
{
item.Attributes["title"] = "This tooltip will display when I hover over item 1 now, thats it!!!";
}
if(item.Value.ToString() == "item 2")
{
item.Attributes["title"] = "This tooltip will display when I hover over item 2 now, thats it!!!";
}
}