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

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

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

Re[2]: treeViewの選択部分の色の変更


(過去ログ 46 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■24736 / inTopicNo.1)  treeViewの選択部分の色の変更
  
□投稿者/ 泥グラマ (3回)-(2008/09/08(Mon) 23:03:00)

分類:[C#] 

treeViewのノードをクリックした際に選択したノードの色が反転します。
この反転を行わずに、選択したノードの背景は白のままにしておきたいのですが
そういったことは可能でしょうか…?

参考までに、現在の状況ですが、
使用しているtreeViewはデザイン画面のプロパティでNodesを入力して使用しています。
選択したノードの背景色を変更しても、反転表示は消えないでフォーカスが移動してから(反転が該当ノードから外れたら)背景は変わっていた…
と、いう状況です。

    treeView1.SelectedNode.BackColor = Color.White;


(何がしたいかといいますと、ノードの文字の色をクリック毎に変更したいのですが
 反転表示のためにクリックで変更した色が見れずに
 反転が移動したときにやっと文字の色が変わっていたことがわかる状態です…)
private void treeView1_Click(object sender, EventArgs e)
{
treeView1.SelectedNode.ForeColor = Color.Aqua;
}


もし、お分かりの方がいられましたら
ご教授ください。よろしくお願い申し上げます。

引用返信 編集キー/
■24737 / inTopicNo.2)  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;
    }
}

引用返信 編集キー/
■24738 / inTopicNo.3)  Re[2]: treeViewの選択部分の色の変更
□投稿者/ 泥グラマ (4回)-(2008/09/09(Tue) 00:53:21)
No24737 (魔界の仮面弁士 さん) に返信
さっそくありがとうございます。
そしてまた今回もありがとうございました。

案1をやってみたところ、クリックしたときに一瞬反転するのが
いかにもクリックしたぞ!という感じが良かったので早速使わせていただきます。

案2ですがDrawModeですね!
話には聞いたことあるのですが、一度も使ったことが無いので気にはなっていました。
こういう場面でも使えるのですね…
せっかくなのでこの場でDrawModeを勉強させていただこうと思います。


それにしてもすごいなぁ…と、いつも記事を読ませていただくたびに感動します。
本当にいつもありがとうございました。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -