mono環境のC#でリストビューで項目削除

コンピュータ

リストビューの項目を削除してみます。

// listview02.cs

// アイテムの削除

using System;
using System.Drawing;
using System.Windows.Forms;
/*
ビルド
mcs listview02.cs /r:System.Windows.Forms.dll /r:System.Drawing.dll
実行
mono listview02.exe
*/
class listview01
{
    public static void Main()
    {
        Form f = new Form();
        f.Size = new Size(800, 600);

        // リストビューの生成
        var lv = new ListView
        {
            Dock = DockStyle.Fill,
            View = View.Details,   // 表示...詳細
        };
        lv.Parent = f;
        // リストビューにカラムを追加
        lv.Columns.AddRange(new ColumnHeader[]
        {
            // 名前、幅
            new ColumnHeader(){Text = "Name", Width = 480, }
        });
        // コンテキストメニュー
        ContextMenuStrip cms = new ContextMenuStrip();
        ToolStripMenuItem deleteMenuItem = new ToolStripMenuItem
        {
            Text = "Delete",
            Visible = true
        };
        // リストビューのアイテムを削除
        deleteMenuItem.Click += (s, e) =>
        {
            foreach(int index in lv.SelectedIndices)
            {
                Console.WriteLine("{0}番目を削除", index+1);
                lv.Items.RemoveAt(index); // アイテムの削除
            }
        };
        cms.Items.Add(deleteMenuItem);
        lv.ContextMenuStrip = cms;
        // リストビューにアイテムを追加
        for (int i = 0; i < 5; i++)
        {
            string[] item = {String.Format("{0}番目",i+1)};
            var lvi = new ListViewItem(item);
            lv.Items.Add(lvi);
        }
        Application.Run(f);
    }

}


項目を選択した状態で右クリック。「Delete」を選ぶと選択中の項目が削除されます。

ListView.Items.RemoveAt(index)でインデックス指定で項目を削除しています。現在選択できる項目が単数ですので問題なく機能しているようですが、マルチセレクトの場合はコードの見直しをしたほうが良さそうです。

コメント