C#プログラミングのメモ書きです。ListViewのListViewItemの一列目にアイコンを表示していてあるイベントでそのアイコンの表示をなくそうとしたけどできなかった。下に簡単なサンプルプログラムを書きます。

foreach (ListViewItem item in testListView.Items)
{
item.ImageIndex = -1; //ListViewItemのアイコンを非表示にする
}

上のプログラムのtestListViewはあるListViewオブジェクトでtestListViewのListViewItemのアイコン表示を全て非表示にしようとしています。

例えば上のプログラムをあるボタンをクリックした時のイベントに書いたとします。で、ボタンをクリックしたとしてもListViewItemのアイコンが非表示にならなかった訳です。ただ、そのListViewItemのアイコン上に何か関係のないアプリのウインドウを重ねた後にもう一度見てみるとアイコンが消えていました。

あと、下のプログラムのように他のアイコンへの変更はボタンクリック時のイベントで反映されました(2はただの例です)

item.ImageIndex = 2;

もちろん、下のプログラムのようにListViewItemの他の項目(String文字列など)の変更も反映されました。

item.SubItems[1].Text = "へんこう"; //ListViewItemの2列目を"へんこう"という文字列に変更する

で、ここで上のコードと一緒にListViewItemのアイコンを非表示にするコードを書いたらどうかなと思って試してみたら、見事に反映されました。

まとめるとListViewItemのアイコンの表示を非表示にする事だけができないわけです。

なので、対処法として以下のプログラムを書いたらやりたい事ができました。

foreach (ListViewItem item in testListView.Items)
{
item.SubItems[1].Text = item.SubItems[1].Text;
item.ImageIndex = -1; //ListViewItemのアイコンを非表示にする
}

上のプログラムの「item.SubItems[1].Text = item.SubItems[1].Text; 」はListViewItemの2列目のString文字列に同じString文字列を設定しているだけで全く意味はありません。ただ、この一行をを書く事で「item.ImageIndex = -1;」が反映されListViewItemのアイコンが非表示になってくれる訳です。

だけど、このプログラムは今見ても賢くないプログラムだなぁ…他のプログラマが見たら「この一行何?」って思うだろうね。なのでもちろんコメントを書いておくべきなんだろうけど、そのコメントを見たら見たで鼻で笑うんだろうな・・・そう考えたらちょっと嫌になってきた。なにか他にいい対処法ないかなぁ・・・

■人気のノートPCを購入する
ノートパソコン売れ筋ランキング ~ 流行の人気ノートPCをネットで探す!
10万円以下のお安いwindows7搭載のおすすめノートPC情報