1

組織化された階層内の複数のTreeNodeを表示するTreeViewコントロールがあります。ユーザーが最高レベルのノードを選択するのを止めたい(これはBeforeSelectイベントを使用して達成された)。また、ユーザーが最上位ノードを選択した場合、TreeViewがノードの背景色を変更して「選択」するのを停止したい場合は、TreeViewが最上位ノードを強調表示しないようにします。

私が使用しているTreeViewは、コントロールのWinFormsバージョンです。

以下は私が現在使用しようとしているソースコードです:

private void tree_BeforeSelect ( object sender, TreeViewCancelEventArgs e )
{
    if ( e.Node.Level == 0 )
    {
        e.Cancel = true;
    }
}

これはノードの選択を解除しますが、これは望ましくない顕著なフラッシュ(〜200ms)の後でのみです。

4

3 に答える 3

9

このコードは、キャンセルされる前に選択範囲を描画しないようにします。

private void treeView1_MouseDown(object sender, MouseEventArgs e)
{
    treeView1.BeginUpdate();
}

private void treeView1_MouseUp(object sender, MouseEventArgs e)
{
    treeView1.EndUpdate();
}
于 2010-10-05T11:31:15.497 に答える
2

BeforeSelectのイベント引数で[キャンセル]をtrueに設定して選択をキャンセルした場合、ノードは選択されないため、背景色は変更されません。

于 2008-12-18T15:08:52.097 に答える
2

コードを使用して TreeView の MouseDown イベントにハンドラーを追加し、その場所を使用してノードを選択すると、既存のコードに加えて、ノードの色を設定できます。

private void treeView1_MouseDown(object sender, MouseEventArgs e)
{
    TreeNode tn = treeView1.GetNodeAt(e.Location);
    tn.BackColor = System.Drawing.Color.White;
    tn.ForeColor = System.Drawing.Color.Black;
}

選択したアウトラインがまだ MouseDown に表示されるという点で、まだわずかな問題がありますが、少なくとも青い背景が停止し、もう少し先に進むことができます。

HTH

ワンショット

于 2009-06-09T22:32:46.223 に答える