C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 46 を表示中)
■24737 / )  Re[1]: treeViewの選択部分の色の変更
□投稿者/ 魔界の仮面弁士 (837回)-(2008/09/08(Mon) 23:59:07)
No24736 (泥グラマ さん) に返信
> treeViewのノードをクリックした際に選択したノードの色が反転します。
> この反転を行わずに、選択したノードの背景は白のままにしておきたいのですが
> そういったことは可能でしょうか…?

==========================================
(案1) 選択されたら、直ちに選択解除する。
------------------------------------------
private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
{
    ((TreeView)sender).SelectedNode = null;
}

private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{
    TreeViewHitTestInfo info = ((TreeView)sender).HitTest(e.Location);
    if ((info.Location & TreeViewHitTestLocations.Label) != 0)
    {
        // テキスト部をクリックした場合のみ反応させる([+]/[-]などには反応させない)
        e.Node.ForeColor = Color.Aqua;
    }
}


==========================================
(案2) 「選択状態」の描画処理を差し替える。
------------------------------------------
private void Form1_Load(object sender, EventArgs e)
{
    treeView1.DrawMode = TreeViewDrawMode.OwnerDrawText;
    treeView1.DrawNode += delegate(object o, DrawTreeNodeEventArgs args)
    {
        args.DrawDefault = ((args.State & TreeNodeStates.Selected) == 0);
        if (args.DrawDefault)
        {
            return;
        }

        Color backColor = args.Node.BackColor;
        Color foreColor = args.Node.ForeColor;
        if (backColor == Color.Empty) backColor = ((TreeView)o).BackColor;
        if (foreColor == Color.Empty) foreColor = ((TreeView)o).ForeColor;

        using (Brush b = new SolidBrush(backColor))
        {
            args.Graphics.FillRectangle(b, args.Node.Bounds);
        }
        using (Brush b = new SolidBrush(foreColor))
        {
            args.Graphics.DrawString(
                args.Node.Text,
                args.Node.NodeFont ?? ((TreeView)o).Font,
                b,
                args.Bounds);
        }
    };
}

private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{
    TreeViewHitTestInfo info = ((TreeView)sender).HitTest(e.Location);
    if ((info.Location & TreeViewHitTestLocations.Label) != 0)
    {
        // テキスト部をクリックした場合のみ反応させる([+]/[-]などには反応させない)
        e.Node.ForeColor = Color.Aqua;
    }
}

返信 編集キー/


管理者用

- Child Tree -