0

TreeView コントロールのカスタム ハンドラーを作成しました。

public class TreeViewOnlyLeavesSelectable : TreeView
{
    protected override void OnNodeMouseClick(TreeNodeMouseClickEventArgs e)
    {
        //base.OnNodeMouseClick(e);
        if (e.Node.Nodes.Count == 0)
        {
            this.SelectedNode = null;
            this.Refresh();
            return;
        }
    }
}

問題は、依然として非リーフ ノードが選択されることです。私はそれをデバッグしました。if ステートメントを正しく実行しますが、アプリケーションではノードがまだ選択されています。私は何を間違っていますか?

4

1 に答える 1

2

コード ( ) によると、e.Node.Nodes.Count == 0リーフ以外のノードのみを選択可能にする必要があります。

あなたの説明(「それはまだ非リーフノードを選択します」)によると、リーフノードのみを選択可能にしたいのです。

それ以外は、OnAfterSelect代わりにオーバーライドを検討してください。これは、マウスの代わりにキーボードを使用する場合にも機能します。

次のコードでは、リーフ ノードのみを選択可能にします。

protected override void OnAfterSelect(TreeViewEventArgs e)
{
    base.OnAfterSelect(e);
    if (e.Node.Nodes.Count != 0)
    {
        this.SelectedNode = null;
    }
}
于 2013-05-20T13:16:03.673 に答える