ListBoxやListViewに表示されている項目を、キーボードの「Deleteキー」で削除する方法です。
KeyDownのイベントハンドラを記述して実現する方法です。
とても簡単です。
KeyDownのイベントハンドラを記述する
画面に配置したListBoxまたはListViewを選択して、イベントの項目を表示します。
その中から、「KeyDown」をさがします。
ダブルクリックでイベントハンドラを記述します。
【ソースコード】KeyDownのイベントハンドラを記述する
コードを表示して、追加されたKeyDownイベントハンドラに以下のコードを記述します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | private void ListView_KeyDown(object sender, KeyEventArgs e) { // Deleteキーが押されたら項目を削除 if (e.KeyData == Keys.Delete) { if (this.ListView.SelectedItems.Count > 0) { // 現在選択している行のインデックスを取得 int index = this.ListView.SelectedItems[0].Index; if ((0 <= index) && (index < this.ListView.Items.Count)) { // 項目を削除 this.ListView.Items.RemoveAt(index); // 次の選択行を決定 if (this.ListView.Items.Count > 0) { int nextIndex = index - 1; if (this.ListView.Items.Count > index) { nextIndex = index; } this.ListView.Items[nextIndex].Selected = true; } } } } } |
一番最初の「if (e.KeyData == Keys.Delete)」で押されたキーの種別を判定しています。
「this.ListView.SelectedItems[0].Index」で選択されている項目のインデックスを取得しています。
今は1行のみ選択として、ゼロ番目の要素を取得するようにしています。
複数行選択の場合は、foreachとかで回しもよいと思います(↓こんな感じで)。
1 2 3 4 5 6 | foreach (ListViewItem item in this.ListView.SelectedItems) { // ここに項目削除の処理を記述 Debug.WriteLine(item.Index); } |
先ほどのソースコードに戻って、
「this.ListView.Items.RemoveAt(index)」でインデックスを指定して項目(要素)を削除しています。
そして、削除すると行選択(背景が青色になって選択状態)が解除されるので、それを回避するために削除後に選択状態にしたい行インデックスを計算しています。
以下のようにSelectedにtrueを指定して、指定したインデックスの要素を選択状態にしています。
1 | this.ListView.Items[nextIndex].Selected = true; |
以上で完了です。