首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C# ListBox 控制項:SelectedItems.Remove vs Items.Remove 差異與正確刪除寫法

     編輯:程式設計綜合問答

核心差異

屬性/方法型別用途備註
listBox.ItemsListBox.ObjectCollection操作所有項目的來源集合支援索引、物件刪除
listBox.SelectedItemsListBox.SelectedObjectCollection僅包含目前被選取的項目唯讀集合,無 Remove 方法

結論:SelectedItems 是唯讀檢視,**不能直接呼叫 Remove**;必須對 Items 操作。

正確刪除寫法

單選模式

if (listBox1.SelectedIndex != -1) {
    listBox1.Items.RemoveAt(listBox1.SelectedIndex);
    // 或
    listBox1.Items.Remove(listBox1.SelectedItem);
}

多選模式

因刪除會改變索引,**必須從後往前刪**或先收集再刪:

// 寫法一:倒序索引刪除
for (int i = listBox1.SelectedIndices.Count - 1; i >= 0; i--) {
    listBox1.Items.RemoveAt(listBox1.SelectedIndices[i]);
}

// 寫法二:收集物件再刪除(推薦,語意清晰)
var toRemove = listBox1.SelectedItems.Cast<object>().ToList();
foreach (var item in toRemove) {
    listBox1.Items.Remove(item);
}

原始碼問題修正

private void button2_Click(object sender, EventArgs e) {
    if (listBox1.SelectedItems.Count == 0) {
        MessageBox.Show("當前沒有選擇內容", "提示");
        return;
    }
    // 錯誤:listBox1.SelectedItems.Remove(...); // 編譯錯誤
    // 正確:
    var items = listBox1.SelectedItems.Cast<object>().ToList();
    foreach (var item in items) listBox1.Items.Remove(item);
}

延伸:資料繫結模式下的刪除

若 DataSource 綁定 BindingList<T> 或 List<T>,請操作資料源而非 Items:

var src = (BindingList<MyItem>)listBox1.DataSource;
var selected = listBox1.SelectedItems.Cast<MyItem>().ToList();
foreach (var item in selected) src.Remove(item);

記住:Items 才是可寫入的集合,SelectedItems 只是選取檢視。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved