アイテム名の変更

C# で ListView に登録したアイテムの名前を変更します。

前田稔(Maeda Minoru)の超初心者のプログラム入門

プロジェクトの設定

  1. ListView に登録したアイテムの名前を変更するときは LabelEdit に true を設定します。
    これだけで「ゆっくり2回クリックする」と編集できるようになります。
    それ以外に特別なコードは必要ありません。
    this.ListView1.LabelEdit = true;
  2. CLI の環境で実行可能な完成したプログラムです。
    実行の方法は Command Line から Windows プログラムを実行 を参照して下さい。
    /**************************************************/
    /*★ ListView でアイテム名を変更する    前田 稔 ★*/
    /**************************************************/
    using System;
    using System.Drawing;
    using System.Windows.Forms;
    
    public class MyForm : Form
    {
        private ListView ListView1;
    
        public MyForm()
        {
            InitializeComponent();
            Load += new System.EventHandler(MyForm_Load);
        }
    
        private void InitializeComponent()
        {
            this.ListView1 = new System.Windows.Forms.ListView();
            this.SuspendLayout();
            // ListView1
            this.ListView1.Location = new System.Drawing.Point(12, 12);
            this.ListView1.Name = "ListView1";
            this.ListView1.Size = new System.Drawing.Size(258, 232);
            this.ListView1.Sorting = System.Windows.Forms.SortOrder.Descending;
            this.ListView1.TabIndex = 0;
            this.ListView1.UseCompatibleStateImageBehavior = false;
            this.ListView1.View = System.Windows.Forms.View.List;
            this.ListView1.LabelEdit = true;    //アイテムを編集
            ListView1.BeforeLabelEdit += new LabelEditEventHandler(ListView1_BeforeLabelEdit);
            ListView1.AfterLabelEdit += new LabelEditEventHandler(ListView1_AfterLabelEdit);
            ListView1.KeyUp += new KeyEventHandler(ListView1_KeyUp);
            // MyForm
            this.ClientSize = new System.Drawing.Size(282, 256);
            this.Controls.Add(this.ListView1);
            this.Name = "MyForm";
            this.ResumeLayout(false);
        }
    
        // ListView にアイテムを登録
        private void MyForm_Load(object sender, EventArgs e)
        {
            ListView1.Items.Add("バラ");
            ListView1.Items.Add("ゆり");
            ListView1.Items.Add("ひまわり");
            ListView1.Items.Add("さくら");
            ListView1.Items.Add("コスモス");
        }
    
        // アイテムのラベル編集が開始
        private void ListView1_BeforeLabelEdit(object sender, LabelEditEventArgs e)
        {
            //インデックス0のアイテム編集は禁止する
            if (e.Item == 0)
            {   e.CancelEdit = true;  }
        }
    
        // アイテムのラベル編集が終了
        private void ListView1_AfterLabelEdit(object sender, LabelEditEventArgs e)
        {
            if (e.Label != null)        //ラベルが変更されたとき
            {
                ListView lv = (ListView)sender;
                //同名のアイテムがあるか調べる
                foreach(ListViewItem lvi in lv.Items)
                {
                    if (lvi.Index != e.Item && lvi.Text == e.Label)
                    {
                        MessageBox.Show("同名のアイテムがすでにあります。");
                        e.CancelEdit = true;    //編集をキャンセルして元に戻す
                        return;
                    }
                }
            }
        }
    
        // F2キーでラベル編集を開始するとき
        private void ListView1_KeyUp(object sender, KeyEventArgs e)
        {
            ListView lv = (ListView)sender;
            //フォーカスのあるアイテムの編集を開始
            if (e.KeyCode == Keys.F2 && lv.FocusedItem != null && lv.LabelEdit)
            {
                lv.FocusedItem.BeginEdit();
            }
        }
    }
    
    class form01
    {
        public static void Main()
        {
            MyForm mf = new MyForm();
            Application.Run(mf);
        }
    }
    

F2で編集を開始

  1. 「ゆっくり2回クリックする」に代えて、F2キーを押すことで、編集を開始する方法も使われます。
    F2を使うときは、KeyUp で Keys.F2 を捕まえて FocusedItem.BeginEdit() を呼び出します。
        // F2キーでラベル編集を開始するとき
        private void ListView1_KeyUp(object sender, KeyEventArgs e)
        {
            ListView lv = (ListView)sender;
            //フォーカスのあるアイテムの編集を開始
            if (e.KeyCode == Keys.F2 && lv.FocusedItem != null && lv.LabelEdit)
            {
                lv.FocusedItem.BeginEdit();
            }
        }
    
  2. アイテムのラベル編集の開始やアイテムのラベル編集の終了を捕まえて、特別な処理を行うことも出来ます。
    ラベル編集の開始は BeforeLabelEdit で捕まえます。
    ラベル編集の終了は AfterLabelEdit で捕まえます。
            ListView1.BeforeLabelEdit += new LabelEditEventHandler(ListView1_BeforeLabelEdit);
            ListView1.AfterLabelEdit += new LabelEditEventHandler(ListView1_AfterLabelEdit);
    
  3. サンプルプログラムでは、BeforeLabelEdit で先頭アイテムの変更を禁止してみました。
    また AfterLabelEdit では、同名のアイテムがあるか調べてメッセージを表示します。
    詳細はソースコード(LVRename.cs)を参照して下さい。

超初心者のプログラム入門(C# Frame Work)