- PR -

C# ListViewで行を選択した状態でメッセージを表示すると背景色が変わる

1
投稿者投稿内容
はやし
常連さん
会議室デビュー日: 2007/10/31
投稿数: 23
投稿日時: 2009-01-08 17:39
いつもお世話になってます。
はやしと申します。

環境はWinXP VS2008 C#です。


ListViewで選択された行が強調表示(青色)になっていて、その行を削除するボタンが配置されています。

削除ボタンを押すと、「削除しますか?」のメッセージが表示されます。
そのメッセージが表示された瞬間に、強調表示されていた行がライトグレーのような色に変わってしまいます(カスケード状態みたいな感じ)。
そのメッセージを閉じてもその色のままです。

なんとなくウィンドウズが勝手に変えてる?ぽい感じに思えるんですが、
やりたい事は、メッセージが表示されている最中も選択行はそのまま(青色)で表示されるようにしたいのです。

色々調べてみたのですがいい方法が見つかりませんでした。

皆さん、何かいい方法や参考になりそうなページ等ありましたらご教授下さい。
お願いします。

ぶさいくろう
ぬし
会議室デビュー日: 2005/11/22
投稿数: 1232
お住まい・勤務地: 川崎市(は俺も含めてロクな人間が住んでないよw)
投稿日時: 2009-01-08 18:24
単にメッセージボックスの方がアクティブになるからじゃね?
Windowsの画面プロパティの設定に依存した色になってるならたぶんそう。
rain
ぬし
会議室デビュー日: 2006/10/19
投稿数: 549
投稿日時: 2009-01-08 18:28
ListView にフォーカスがあるうちは青色(Windows の[画面のプロパティ]−[デザイン]−[詳細設定]−[選択項目] で指定されている色)になります。
ListView からフォーカスが外れると、グレーになります。

# 非アクティブのときの選択色って、どこで設定できるんだろう

引用:

はやしさんの書き込み (2009-01-08 17:39) より:

やりたい事は、メッセージが表示されている最中も選択行はそのまま(青色)で表示されるようにしたいのです。


とりあえず思いつくところでは、

1.そういうものだと諦める
# 文句を言う人がいれば、「ほら、エクスプローラも同じ動きですよ」と説明して納得してもらう…というか納得してもらった

2.MessageBox を表示している最中は諦める。閉じた後、ListView.Select() で強引にフォーカスさせる
3.選択したときに、選択行の背景色を青色に変える処理を自前で実装する(でもって、ListView.HideSelection = true)
はやし
常連さん
会議室デビュー日: 2007/10/31
投稿数: 23
投稿日時: 2009-01-08 18:44
ぶさいくろうさん、rainさん、早速のお返事ありがとうございます。

引用:

ぶさいくろうさんの書き込み (2009-01-08 18:24) より:
Windowsの画面プロパティの設定に依存した色になってるならたぶんそう



そうですね、因みにその画面プロパティの設定てどこから見れるんですか?

引用:

rainさんの書き込み (2009-01-08 18:28) より:
# 非アクティブのときの選択色って、どこで設定できるんだろう


そう!それを設定できるのが一番いいんですが・・・(汗)

引用:

rainさんの書き込み (2009-01-08 18:28) より:
1.そういうものだと諦める
# 文句を言う人がいれば、「ほら、エクスプローラも同じ動きですよ」と説明して納得してもらう…というか納得してもらった

2.MessageBox を表示している最中は諦める。閉じた後、ListView.Select() で強引にフォーカスさせる
3.選択したときに、選択行の背景色を青色に変える処理を自前で実装する(でもって、ListView.HideSelection = true)



ですよね・・・やっぱり自分で実装するしかないんですかねぇ・・・。
因みに、3の自前で実装ていう方法はどのようにして調べたらいいでしょうか?

ご教授お願いします。
ぶさいくろう
ぬし
会議室デビュー日: 2005/11/22
投稿数: 1232
お住まい・勤務地: 川崎市(は俺も含めてロクな人間が住んでないよw)
投稿日時: 2009-01-09 09:38
ためしてないけどListViewItem.BackColorプロパティかな。
rain
ぬし
会議室デビュー日: 2006/10/19
投稿数: 549
投稿日時: 2009-01-09 10:22
画面のプロパティの設定は、例えば以下の方法で見ることができます。
・[コントロールパネル]−[画面]
・デスクトップを右クリック→[プロパティ]

引用:

rainさんの書き込み (2009-01-08 18:28) より:
# 非アクティブのときの選択色って、どこで設定できるんだろう


あれこれいじってみたところ、デザインの詳細の [3D オブジェクト] の色と連動しているようです。
(Windows XP スタイル、Windows クラシック スタイル で確認。Vista は違うかも)

これを変更するのは…やめたほうがいいでしょうね。
rain
ぬし
会議室デビュー日: 2006/10/19
投稿数: 549
投稿日時: 2009-01-09 10:33
もう1つ、案を置いておきます。

4.ListView のかわりに、DataGridView を使う

DataGridView だと、フォーカスが外れても選択の色は変わりません。
はやし
常連さん
会議室デビュー日: 2007/10/31
投稿数: 23
投稿日時: 2009-01-13 19:37
[解決]

ぶさいくろうさん、rainさんお返事ありがとうございます。

引用:

rainさんの書き込み(2009-01-09 10:22)より:
あれこれいじってみたところ、デザインの詳細の [3D オブジェクト] の色と連動しているようです。


私も確認してみたところ、そのようですね。


引用:

rainさんの書き込み(2009-01-09 10:33)より:
もう1つ、案を置いておきます。

4.ListView のかわりに、DataGridView を使う

DataGridView だと、フォーカスが外れても選択の色は変わりません。



rainさんの方法でサンプルを作ってみたら上手く出来たので、この方法を使いたいのですが、残念ながら一から作り直す時間がありません・・・。

引用:

ぶさいくろうさんの書き込み (2009-01-09 09:38) より:
ためしてないけどListViewItem.BackColorプロパティかな。


そして、ぶさいくろうさんの方法も試してみて、これをヒントに思いついた苦肉の策がこれです!!

↓↓
削除ボタン押下時のイベント内にて、選択行の色を強制的に変える。

listView1.SelectedItems[0].BackColor = Color.FromArgb(49, 106, 197);
listView1.SelectedItems[0].ForeColor = Color.White;
色を変えてからメッセージを表示する。

で、削除しない場合は色を元に戻し、再度選択状態にする。

とりあえずこの方法をお客さんに提案してみたところ、納得して頂いたので解決出来ました。

本当に助かりました、ありがとうございます。




1

スキルアップ/キャリアアップ(JOB@IT)