ツールチップを使用してTreeNodeの詳細な説明を表示する場合、ツールチップは、ノードのテキストを完成させているかのように、ノードの上に描画されます。また、テキストが長い場合、ツールチップはテキストが画面を超えるように配置されます。
しかし、私が必要としているのは、TreeNodeの上ではなく、マウスポインタのすぐ下に表示するツールチップです。
これを行う方法はありますか?
語るのではなく見せる:
方法:
私が欲しい方法:
探していた答えは見つかりませんでしたが、どういうわけか思い通りに機能させました。
以前は、ツールチップを次のように設定しようとしていました。
private void treeView1_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
{
TreeNode node = treeView1.GetNodeAt(e.X, e.Y);
if (node != null)
{
string text = GetNodeTooltip(node);
string currentText = toolTip1.GetToolTip(treeView1);
if (text.Equals(currentText) == false)
{
toolTip1.SetToolTip(treeView1, text);
}
}
else
{
toolTip1.SetToolTip(tree, string.Empty);
}
}
else
{
toolTip1.SetToolTip(tree, string.Empty);
}
}
今、私treeView1.ShowNodeToolTips=true
は作成し、すべてのノードを作成するときにTreeNode.ToolTipText
、目的のテキストでその値を設定するだけです。
private ToolTip toolTipController = new ToolTip() { UseFading = false,UseAnimation = false};
protected override void OnMouseMove(MouseEventArgs e)
{
var node = GetNodeAt(e.X, e.Y);
if (node != null)
{
var text = node.Text;
if (!text.Equals(toolTipController.GetToolTip(this)))
{
toolTipController.Show(text, this, e.Location, 2000);
}
}
else
{
toolTipController.RemoveAll();
}
}
ToolTip を定義し、TreeView の MouseOverEventHandler を記述する必要があります。MouseOverEventHandler で、マウスが配置されているノードを計算し、説明の ToolTip を表示します。また、ツールチップの説明を複数回設定していないことを確認してください。そうしないと、動作が非常に見苦しくなります。
より良い方法は、フォームの左下にある StatusStrip に説明を表示することです。
アップデート:
質問を明確にしたので、OK。ToolTip.Show
座標を指定できるメソッドを使用できます。
public void Show(
string text,
IWin32Window window,
int x,
int y,
int duration
)
明らかに、x と y にオフセットを追加する必要があります。