2009-03-24 21 views
2

TreeViewでノードをクリックしたときに、何らかの処理を行うためにTreeViewでclickイベントを使用しています。クリックは、ノードのラベルにあるときC#TreeView.GetNodeAt()画像をクリックすると問題が発生する

private void TreeView_Click(object sender, System.EventArgs e) 
{ 
    MouseEventArgs mouseEventArgs = e as MouseEventArgs; 

    if (mouseEventArgs == null) 
     return; 

    // Get the node that is being clicked.     
    TreeNode node = this.GetNodeAt(mouseEventArgs.X, mouseEventArgs.Y); 

    // Do other stuff... 
} 

するしかし、GetNodeAt()メソッドはのみ動作し、とき:私はこのように、マウスの座標でGetNodeAt()を呼び出すことで、クリックされたノードを取得することによって、これを行いますノードイメージがクリックされ、GetNodeAt()がnullを返します。これは、画像がクリックされたときにノードが実際に選択されているが、どのノードであるかを知ることができないため、少し面倒です。

誰にも提案はありますか?

更新日: 代わりにSelectedNodeを使用するよう提案しました。 Clickイベントが発生した後に設定されているので、私はできません。これは実際にTreeViewを継承するコントロールで、TreeNode自体の代わりにTreeNodeが表す基本データを持つ、自分のClickedイベントです。

更新:この動作を導入したコードでGetNodeAt()メソッドをオーバーライドしていたことがわかりましたが、わかりませんでした。したがって、問題はnullとvoidであり、GetNodeAt()メソッドに問題はありません。なぜ誰かがこれを行うのかは不思議なままです。 :)

答えて

4

でパンチを打たあなたはBeforeSelectまたはAfterSelectイベントを試みたことがありますか?選択したノードをTreeViewCancelEventArgsから直接取得し、クリックイベントで使用することができます。

編集:追加の思想:私はこれを見ることができる唯一の問題はBeforeSelectイベントが実際に後にクリックし、MouseClickとイベントを発生させていることです。

別の編集:クリックする前に発生するイベントが必要な場合は、NodeMouseClickを使用できます。 - TreeNodeMouseClickEventArgsにはNodeプロパティがあります。

+0

これらのイベントまたはSelectedNodeChangedイベントが必要です。マウスがクリックしたときだけ何かをしたいのでない限り、キーボードを使用するとコードが壊れる可能性があります。 – Samuel

+0

右、私も自分自身を把握するためにしばらくかかったが、Treeview.AfterSelect(またはBeforeSelect)は、クリックイベントではなく、あなたが望むものである可能性が最も高い。 – Davy8

+0

@Samuel - BeforeSelectとAfterSelectは、上向き矢印のようなキーボードイベントであっても起動します。 – Moose

2

TreeView.SelectedNodeを使用しないのはなぜですか?

+0

Clickイベントが発生した後に設定されているため、できません。これは実際にTreeViewを継承するコントロールで、TreeNode自体の代わりにTreeNodeが表す基本データを持つ、自分のClickedイベントです。 – Casper

0

試してみてください。

TreeNode node = this.SelectedNode; 

EDIT:ショーン

関連する問題