- - PR -
C# ListViewで行を選択した状態でメッセージを表示すると背景色が変わる
1
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2009-01-08 17:39
いつもお世話になってます。
はやしと申します。 環境はWinXP VS2008 C#です。 ListViewで選択された行が強調表示(青色)になっていて、その行を削除するボタンが配置されています。 削除ボタンを押すと、「削除しますか?」のメッセージが表示されます。 そのメッセージが表示された瞬間に、強調表示されていた行がライトグレーのような色に変わってしまいます(カスケード状態みたいな感じ)。 そのメッセージを閉じてもその色のままです。 なんとなくウィンドウズが勝手に変えてる?ぽい感じに思えるんですが、 やりたい事は、メッセージが表示されている最中も選択行はそのまま(青色)で表示されるようにしたいのです。 色々調べてみたのですがいい方法が見つかりませんでした。 皆さん、何かいい方法や参考になりそうなページ等ありましたらご教授下さい。 お願いします。 | ||||||||||||
|
投稿日時: 2009-01-08 18:24
単にメッセージボックスの方がアクティブになるからじゃね?
Windowsの画面プロパティの設定に依存した色になってるならたぶんそう。 | ||||||||||||
|
投稿日時: 2009-01-08 18:28
ListView にフォーカスがあるうちは青色(Windows の[画面のプロパティ]−[デザイン]−[詳細設定]−[選択項目] で指定されている色)になります。
ListView からフォーカスが外れると、グレーになります。 # 非アクティブのときの選択色って、どこで設定できるんだろう
とりあえず思いつくところでは、 1.そういうものだと諦める # 文句を言う人がいれば、「ほら、エクスプローラも同じ動きですよ」と説明して納得してもらう…というか納得してもらった 2.MessageBox を表示している最中は諦める。閉じた後、ListView.Select() で強引にフォーカスさせる 3.選択したときに、選択行の背景色を青色に変える処理を自前で実装する(でもって、ListView.HideSelection = true) | ||||||||||||
|
投稿日時: 2009-01-08 18:44
ぶさいくろうさん、rainさん、早速のお返事ありがとうございます。
そうですね、因みにその画面プロパティの設定てどこから見れるんですか?
そう!それを設定できるのが一番いいんですが・・・(汗)
ですよね・・・やっぱり自分で実装するしかないんですかねぇ・・・。 因みに、3の自前で実装ていう方法はどのようにして調べたらいいでしょうか? ご教授お願いします。 | ||||||||||||
|
投稿日時: 2009-01-09 09:38
ためしてないけどListViewItem.BackColorプロパティかな。
| ||||||||||||
|
投稿日時: 2009-01-09 10:22
画面のプロパティの設定は、例えば以下の方法で見ることができます。
・[コントロールパネル]−[画面] ・デスクトップを右クリック→[プロパティ]
あれこれいじってみたところ、デザインの詳細の [3D オブジェクト] の色と連動しているようです。 (Windows XP スタイル、Windows クラシック スタイル で確認。Vista は違うかも) これを変更するのは…やめたほうがいいでしょうね。 | ||||||||||||
|
投稿日時: 2009-01-09 10:33
もう1つ、案を置いておきます。
4.ListView のかわりに、DataGridView を使う DataGridView だと、フォーカスが外れても選択の色は変わりません。 | ||||||||||||
|
投稿日時: 2009-01-13 19:37
[解決]
ぶさいくろうさん、rainさんお返事ありがとうございます。
私も確認してみたところ、そのようですね。
rainさんの方法でサンプルを作ってみたら上手く出来たので、この方法を使いたいのですが、残念ながら一から作り直す時間がありません・・・。
そして、ぶさいくろうさんの方法も試してみて、これをヒントに思いついた苦肉の策がこれです!! ↓↓ 削除ボタン押下時のイベント内にて、選択行の色を強制的に変える。 listView1.SelectedItems[0].BackColor = Color.FromArgb(49, 106, 197); listView1.SelectedItems[0].ForeColor = Color.White; 色を変えてからメッセージを表示する。 で、削除しない場合は色を元に戻し、再度選択状態にする。 とりあえずこの方法をお客さんに提案してみたところ、納得して頂いたので解決出来ました。 本当に助かりました、ありがとうございます。 |
1