C# 開発

【C#】ListView

2025.01.18 ListView にアイテムを追加する

private void Form1_Load(object sender, EventArgs e)
{
    listView1.View = View.Details;
    listView1.Columns.Add("メーカー", 100, HorizontalAlignment.Left);
    listView1.Columns.Add("パソコン名", 100, HorizontalAlignment.Left);

    listView1.Items.Add("NEC").SubItems.Add("ValueStar");
    listView1.Items.Add("SONY").SubItems.Add("VAIO");
    listView1.Items.Add("DELL").SubItems.Add("Precision");
}

2025.01.24 ListView にアイテムを追加する

private void Form1_Load(object sender, EventArgs e)
{
    listView1.View = View.Details;
    listView1.Columns.Add("メーカー");
    listView1.Columns.Add("パソコン名");
    listView1.Columns.Add("CPU");

    ListViewItem lvi;

    lvi = listView1.Items.Add("NEC");
    lvi.SubItems.Add("ValueStar");
    lvi.SubItems.Add("Core 2 Duo");

    lvi = listView1.Items.Add("SONY");
    lvi.SubItems.Add("VAIO");
    lvi.SubItems.Add("Corei5");

    lvi = listView1.Items.Add("DELL");
    lvi.SubItems.Add("Precision");
    lvi.SubItems.Add("Corei7");
}

2025.01.20 ListView に文字列配列をアイテムとして追加する

private void Form1_Load(object sender, EventArgs e)
{
    listView1.View = View.Details;
    listView1.Columns.Add("メーカー", 100, HorizontalAlignment.Left);
    listView1.Columns.Add("パソコン名", 100, HorizontalAlignment.Left);

    string[][] s1 = { new string[2] { "NEC", "ValueStar" },
                      new string[2] { "SONY", "VAIO" },
                      new string[2] { "DELL", "Precision" }
                    };

    foreach (var idx in Enumerable.Range(0, s1.Length))
    {
        listView1.Items.Add(new ListViewItem(s1[idx]));
    }
}

2025.01.18 ListView にチェックボックスを表示する

private void button1_Click(object sender, EventArgs e)
{
    listView1.View = View.Details;
    listView1.CheckBoxes = true;
    listView1.Columns.Add("番号", 300, HorizontalAlignment.Left);

    foreach (var idx in Enumerable.Range(0, 100))
    {
      listView1.Items.Add(idx.ToString());
      listView1.Items[idx].Checked = true;
    }
}

2025.01.18 ListView からアイテムの 2 番目 (インデックス=1) を削除する

private void button1_Click(object sender, EventArgs e)
{
    listView1.Items[1].Remove();
}

2025.01.20 ListView のすべてのカラムを削除する

private void button1_Click(object sender, EventArgs e)
{
    // カラムとアイテムの両方を削除
    listView1.Columns.Clear();
}

2025.01.23 ListView のすべてのアイテムを削除する

private void button1_Click(object sender, EventArgs e)
{
    // アイテムのみ削除(カラムは残る)
    listView1.Items.Clear();
}

2025.01.21 ListView のサブアイテム foreach で処理する

private void Form1_Load(object sender, EventArgs e)
{
    foreach (ListViewItem.ListViewSubItem item in listView1.Items[0].SubItems)
    {
        listBox1.Items.Add(item.Text);
    }
}

2025.01.21 背景色を 1 行おきに変える

private void Form1_Load(object sender, EventArgs e)
{
    listView1.View = View.Details;
    listView1.Columns.Add("番号", 300, HorizontalAlignment.Left);

    foreach (var idx in Enumerable.Range(0, 100))
    {
        listView1.Items.Add(idx.ToString());

        if ((idx % 2) == 0)
        {
            listView1.Items[idx].BackColor = Color.Aqua;
        }
    }
}

2025.01.21 アイテムをカンマ区切りの文字列に変換する (1)

private void button1_Click(object sender, EventArgs e)
{
    string sWork;

    foreach (ListViewItem lvi in listView1.Items)
    {
        sWork = "";

        foreach (ListViewItem.ListViewSubItem item in lvi.SubItems)
        {
            sWork += item.Text;
            sWork += ",";
        }

        sWork = sWork.TrimEnd(',');
        listBox1.Items.Add(sWork);
    }
}

2025.01.21 アイテムをカンマ区切りの文字列に変換する (3)

delegate IEnumerable<string> Test(ListViewItem.ListViewSubItemCollection subitems);

private void button1_Click(object sender, EventArgs e)
{
    Test td = new Test(is2);

    foreach (ListViewItem lvi in listView1.Items)
    {
        string s2 = string.Join(",", td(lvi.SubItems));
        listBox1.Items.Add(s2);
    }
}

private IEnumerable<string> is2(ListViewItem.ListViewSubItemCollection subitems)
{
    foreach (var idx in Enumerable.Range(0, subitems.Count))
    {
        yield return subitems[idx].Text;
    }
}

2025.01.21 アイテムをカンマ区切りの文字列に変換する (2)

private void button1_Click(object sender, EventArgs e)
{
    foreach (ListViewItem lvi in listView1.Items)
    {
        string s2 = string.Join(",", is2(lvi.SubItems));
        listBox1.Items.Add(s2);
    }
}

private IEnumerable<string> is2(ListViewItem.ListViewSubItemCollection subitems)
{
    foreach (var idx in Enumerable.Range(0, subitems.Count))
    {
        yield return subitems[idx].Text;
    }
}

2025.01.23 アイテム追加を高速に行う (2)

private void button1_Click(object sender, EventArgs e)
{
    listView1.View = View.Details;
    listView1.Columns.Add("NUM");

    // 描画を一時停止
    listView1.BeginUpdate();

    foreach (var idx in Enumerable.Range(0, 100000))
    {
        listView1.Items.Add(idx.ToString());
    }

    // 描画を更新 (4倍近いパフォーマンス向上)
    listView1.EndUpdate();
}

2025.01.24 列幅を列名の内容の応じて調整する

private void button1_Click(object sender, EventArgs e)
{
    // リストビューの列幅を列名の内容に応じて調整しています。
    // 今回は列名の方がアイテムの内容よりも概ね長いため、すべてのアイテムが表示されています。
    listView1.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent);
}

2025.01.24 列幅をアイテムの内容の応じて調整する

private void button1_Click(object sender, EventArgs e)
{
    // リストビューの列幅をアイテムの内容に応じて調整しています。このため、列名が一部隠れます。
    listView1.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent);
}

-C# 開発