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()メソッドに問題はありません。なぜ誰かがこれを行うのかは不思議なままです。 :)
これらのイベントまたはSelectedNodeChangedイベントが必要です。マウスがクリックしたときだけ何かをしたいのでない限り、キーボードを使用するとコードが壊れる可能性があります。 – Samuel
右、私も自分自身を把握するためにしばらくかかったが、Treeview.AfterSelect(またはBeforeSelect)は、クリックイベントではなく、あなたが望むものである可能性が最も高い。 – Davy8
@Samuel - BeforeSelectとAfterSelectは、上向き矢印のようなキーボードイベントであっても起動します。 – Moose