プログラミング素人のはてなブログ

プログラミングも電気回路も専門外の技術屋の末端が勉強したことや作品をアウトプットするブログ。コードに間違いなど見つけられたら、気軽にコメントください。 C#、Python3、ラズパイなど。

ちょっとわかりにくいC#のListview

ListviewとはExcelの表のようなオブジェクトです。
表を作りたいときに使いたくなるオブジェクトですが、思うような形になかなかならないので、基本の手法をまとめました。

ListViewオブジェクトの作成

ツールボックスからListViewを選択し、適当な大きさに広げて設置します。
縦軸、横軸に項目を設定するには右上の▼を開きます。
f:id:s51517765:20201021210135p:plain

横軸は「列の編集」です。
0番目はTextを空白にして、1番目のColumnHeader2のTextを「横1」、ColumnHeader3を「横2」…とします。
f:id:s51517765:20201021215416p:plain
f:id:s51517765:20201021215644p:plain

縦軸は▼から「項目の編集」を選択します。
0番目はTextを「縦1」、1番目を「縦2」…とします。
f:id:s51517765:20201021212843p:plain
ここまでで、デザイナーは↓のようになっています。
f:id:s51517765:20201021214838p:plain

ListViewのプロパティの「View」をDetailにします。
f:id:s51517765:20201021215017p:plain

これでListViewが完成します。
f:id:s51517765:20201021215744p:plain

ListViewに数値(文字)を格納

各セルには縦(行)方向はItems[i]、横(列)方向はSubItems[j]でアクセスします。
Addで値を格納します。

private void Form1_Load(object sender, EventArgs e)
{
    listView1.Items[0].SubItems.Add("a");
    listView1.Items[0].SubItems.Add("aa");
    listView1.Items[0].SubItems.Add("aaa");
    listView1.Items[1].SubItems.Add("b");
    listView1.Items[1].SubItems.Add("bb");
    listView1.Items[1].SubItems.Add("bbb");
    listView1.Items[2].SubItems.Add("c");
    listView1.Items[2].SubItems.Add("cc");
    listView1.Items[2].SubItems.Add("ccc");
        }

f:id:s51517765:20201021220454p:plain

すでに値が入っているときは.Textを上書きします。

private void button1_Click(object sender, EventArgs e)
{
    for (int row = 0; row < listView1.Items.Count; row++)
    {
        for (int i = 1; i <= 3; i++)
        {
            listView1.Items[row].SubItems[i].Text = (i + row * 3).ToString();
        }
    }
}

f:id:s51517765:20201021220710p:plain

列幅の調整

基本はWidthプロパティを設定します。

listView1.Columns[0].Width = 120;

値を"-1"にすると、SubItemの文字列に応じて列幅が調整されます。

foreach (ColumnHeader ch in listView1.Columns)
{
  ch.Width = -1;
}

値を"-2"にすると、columnHeaderもふくめて最適化されます。

foreach (ColumnHeader ch in listView1.Columns)
{
  ch.Width = -2;
}

まとめ

C#のListViewの基本操作をまとめました。
また、似たようなものとしてGridViewというものもあります。