2017-01-23 6 views
0

TreeViewTreeNodeが表示されたら、ToolTipが表示されます。そして、マウスがTreeNodeを離れるとき、ToolTipは消滅するはずです。私は、MousePositionが変更されていない限り、をPontToClient()に、Show()ToolTipにすることでこれを試みました。それは動作しますが、それは良く見えません。 ToolTipが消えてしまったり、マウスがわずかに動いただけでは表示されません。C#TreeNodeが表示されている限りTreeNodeを表示する

これは、代わりに私がいる限りMousePositionTreeNodeがイベントをトリガしTreeNodeと同じであるようToolTipを表示しようとしている多少の作業結果

private void treeView_NodeMouseHover(object sender, TreeNodeMouseHoverEventArgs e) 
{ 
    ToolTip tip = new ToolTip(); 
    tip.ToolTipTitle = e.Node.Name; 
    Point client = PointToClient(MousePosition); 
    while (client == PointToClient(MousePosition)) 
    { 
     tip.Show(e.Node.Nodes.Count.ToString(), this, PointToClient(MousePosition)); 
    } 
    tip.Dispose(); 
} 

を与えました。しかし、今ではToolTipは表示されませんか?

private void treeView_NodeMouseHover(object sender, TreeNodeMouseHoverEventArgs e) 
{ 
    ToolTip tip = new ToolTip(); 
    tip.ToolTipTitle = e.Node.Name; 
    while (e.Node == treeView.GetNodeAt(MousePosition)) 
    { 
     tip.Show(e.Node.Nodes.Count.ToString(), this, PointToClient(MousePosition)); 
    } 
    tip.Dispose(); 
} 

UPDATE

私は例外を以下では、この結果ことに気づきましたか?

treeView.GetNodeAt(MousePosition).Name 

オブジェクト参照がオブジェクト

答えて

1

treeView.GetNodeAt(MousePosition)リターンnullのインスタンスに設定されていないので、あなたはそれからプロパティNameにアクセスすることはできません。

MousePositionは、あなたのコントロールではなく、画面上のマウスポインタの位置です。座標はx:1000、y:500のようになります。しかし、GetNodeAt()はツリービューの座標を期待しています。たとえば、最初のノードはx:20、Y:50です。座標。

あなたは、あなたのツリービューへの相対値でこのような何か、それらの座標を変換する必要があります。

var point = treeView.PointToClient(MousePosition); 
var node = treeView.GetNodeAt(point); 

UPDATE: 2番目の例では、正しい使い方は次のようになります。

private void treeView1_NodeMouseHover(object sender, TreeNodeMouseHoverEventArgs e) 
{ 
    ToolTip tip = new ToolTip(); 
    tip.ToolTipTitle = e.Node.Name; 
    while (e.Node == treeView.GetNodeAt(treeView.PointToClient(MousePosition))) 
    { 
     tip.Show(e.Node.Nodes.Count.ToString(), this, PointToClient(MousePosition)); 
    } 
    tip.Dispose(); 
} 

物事を単純化するために(そして、ちらつき、ツールチップの一定の初期化などを避けるために)、私はメソッドの外にToolTip宣言を移動し、フォームのスコープに入れて、ホバー上にToolTipを表示し、マウスの動きでそれを隠す。 このように:

ToolTip tip = new ToolTip(); 

private void treeView_NodeMouseHover(object sender, TreeNodeMouseHoverEventArgs e) 
{ 

    tip.ToolTipTitle = e.Node.Name; 
    tip.Show(e.Node.Nodes.Count.ToString(), this, PointToClient(MousePosition)); 

} 

private void treeView_MouseMove(object sender, MouseEventArgs e) 
{ 
    if (treeView.GetNodeAt(treeView.PointToClient(MousePosition)) == null) 
     tip.Hide(this); 
} 
関連する問題