ListViewとArrayListの連動がうまくいきません
メールソフトの中で既読、未読を設定するフラグを実装しているのですが
ListViewのカラムクリック時の昇順・降順設定を追加するとなぜか
おかしな表示になってしまいます。
未読(フラグがtrue)の時は太字で表示されて、既読(フラグがfalse)の
場合は通常のフォントで表示するようにしてあるのですが、
指定している配列ですべてtrueにしているのにもかかわらず表示されるのは
trueとfalseの結果の表示がまばらに出てしまって何が原因なのかが
分かりません。
どうすればこれを解決する事が出来るでしょうか?
環境はVS2005(C#)、.NET Framework 2.0です。
リストビューの昇順・降順ロジックはどぼんの.NET Tipsに
載っている文字列、数字、日付で比較が可能なタイプのを
使用しています。
public void UpdateListView()
{
ArrayList list = null;
int i = 0;
if (listView1.Columns[1].Text == "差出人") {
// 受信メールの場合
list = collectionMail[RECEIVE];
} else if (listView1.Columns[1].Text == "差出人または宛先") {
// 削除メールの場合
list = collectionMail[DELETE];
}
listView1.BeginUpdate();
// リストビューの内容をクリアする
listView1.Items.Clear();
// ListViewを設定する
foreach (Mail mail in list) {
ListViewItem item = new ListViewItem(mail.subject);
item.SubItems.Add(mail.address);
item.SubItems.Add(mail.date);
// この2行を追加
item.Tag = i;
i++;
listView1.Items.Add(item);
// 未読(未送信)の場合は、フォントを太字にする
int index = listView1.Items.Count - 1;
if (mail.notReadYet == true) {
listView1.Items[index].Font = new Font(this.Font, FontStyle.Bold);
}
}
listView1.EndUpdate();
}
private void listView1_DoubleClick(object sender, EventArgs e)
{
Mail mail = null;
ListViewItem item = listView1.SelectedItems[0];
if (listView1.Columns[1].Text == "差出人") {
mail = (Mail)collectionMail[RECEIVE][(int)item.Tag];
} else if (listView1.Columns[1].Text == "差出人または宛先") {
mail = (Mail)collectionMail[DELETE][(int)item.Tag];
}
mail.notReadYet = false;
textBox1.Text = mail.body;
UpdateListView();
}
private void Form1_Load(object sender, EventArgs e)
{
// ListViewにアイテムを追加する
for (int no = 0; no < subject.Length; no++) {
Mail mail = new Mail(subject[no], address[no], date[no], body[no], read[no]);
collectionMail[RECEIVE].Add(mail);
}
UpdateTreeView();
UpdateListView();
// ListViewItemComparerの作成と設定
listViewItemSorter = new ListViewItemComparer();
listViewItemSorter.ColumnModes = new ListViewItemComparer.ComparerMode[] { ListViewItemComparer.ComparerMode.String, ListViewItemComparer.ComparerMode.String, ListViewItemComparer.ComparerMode.DateTime };
// ListViewItemSorterを指定する
listView1.ListViewItemSorter = listViewItemSorter;
}
お礼
ばっちりできました!ありがとうございます。