DOBON.NET DOBON.NETプログラミング掲示板過去ログ

リストビューアイテム選択時の色

環境/言語:[VC++]
分類:[.NET]

2005/01/29(Sat) 00:46:15 編集(投稿者)

お世話になります。
リストビューで、1行選択時の青?色はColor::XXXで表現すると何色になるのでしょうか。またはColor::XXX以外に1行選択時の色を指定する方法があれば教えていただけないでしょうか。
じゃんぬねっと です。

■No8777に返信(ひでさんの記事)
> リストビューで、1行選択時の青?色はColor::XXXで表現すると何色になるのでしょうか。

選択時の色は、画面のデザイン設定で自由に変更できますので、
0xRRGGBB という表現での指定は不可能です。
 Color::FromName("Highlight");
のように、システム定義名から求めてください。

> またはColor::XXX以外に1行選択時の色を指定する方法があれば教えていただけないでしょうか。

フォーカスが当たっている以上は、Highlight が優先になってしまいますね...
ListViewItem の ForeColor と BackColor の設定が無視されちゃいますので、
もしやろうとすると、ややこしいことになるでしょうね。
こちらについては、何か良い案がないか調べてみます。
じゃんぬねっと です。
API を使わずに簡単にやるのならば以下を参照してください。

相変わらず、VC++ をインストールしていないので未確認ですが... (^-^;)
おそらく背景色が Red に変わるかと思われます。

この方法は簡単ですが、選択しているアイテムを別途自分で管理する必要があります。
カスタムコントロール化して、SelectedItem 関係を「すべて」 Shadow して、
別途自分で管理した MySelectedItem に置き換えてあげれば、まだ使えるかもしれません。

private:
    System::Void listView1_SelectedIndexChanged(System::Object* sender, System::EventArgs* e) {
        //ListView1.BeginUpdate()

        for (i = 0; i <= listView1->Items->Count ; i++) {
            ListViewItem* lvItem = listView1->Items->Item[i];

            if (lvItem->Selected) {
                lvItem->Selected = false;
                lvItem->BackColor = Color::Red;
            } else if (lvItem->BackColor.Name != "Window") {
                lvItem->BackColor = Color::FromName("Window");
            }
        }

        // ListView1.EndUpdate()
    }
懇切丁寧なお返事ありがとうございました。

結局、仕様ということでフォーカスがあたっているときはHighlightとし、フォーカスが離れたときはSteelBlueということになりました。

どうもありがとうございました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板