FC2ブログ

ListViewのDrawSubItemのItemState

ListViewをDetailスタイルでオーナドローするっちうのは極々一般的な事で、
例えば、

private void ListView1_DrawSubItem(object sender, DrawListViewSubItemEventArgs e)
{
if ((e.ItemState & ListViewItemStates.Selected) == ListViewItemStates.Selected)
{
e.SubItem.ForeColor = Color.White;
e.SubItem.BackColor = SystemColors.Highlight;
e.DrawBackground();
}
else {
e.SubItem.ForeColor = Color.Black;
e.SubItem.BackColor = Color.White;
}
e.DrawText();
}

てな事をやって、選択行を反転表示するのが普通だと思うんだが、
うちの環境(Win7(64) VC#2010Express)でこのコードを実行すると、全行反転表示されてしまう。
なんなんじゃーと悩むことしばし。
e.ItemStateのSelectedビットが全行立ってくる。

どうも、ListViewのHideSelectionプロパティをfalseにするとこうなるようだ。
HideSelectionをtrueにすると全然問題なく選択行のみ反転表示となる。

で、HideSelectionをtrueにはしたくないので、しょうがなく、

private void ListView1_DrawSubItem(object sender, DrawListViewSubItemEventArgs e)
{
if (e.Item.ListView.SelectedItems.Contains(e.Item))
{
e.SubItem.ForeColor = Color.White;
e.SubItem.BackColor = SystemColors.Highlight;
e.DrawBackground();
}
else {
e.SubItem.ForeColor = Color.Black;
e.SubItem.BackColor = Color.White;
}
e.DrawText();
}

としてとりあえず回避。
業務でこの現象が起きた記憶がないので、うちの環境に依存した現象なんだろうか・・・
良くわからんなー。
スポンサーサイト

Stone Mason

かなり懐かしいところで。
Harvey Mason - Stone Mason
stonemason.jpeg

えーと、このLPを買ったのはいつだっけ、二十歳くらいの時、新譜で並んでたのを買ってきた。
パチンコで勝ったのかな、もう一枚、何かと一緒に。

当時はそれほど熱心に聞き込んだわけじゃなかったけれど、
でまぁ30年経ったのでそろそろどんなもんだろと探して聞いて見た、んー微妙。(^^;
プロフィール

f_yamaki

Author:f_yamaki

アクセスカウンタ
最近の記事
最近のコメント
最近のトラックバック
月別アーカイブ
カテゴリー
ブロとも申請フォーム

この人とブロともになる

ブログ内検索
RSSフィード
リンク