在 WinForms 開發中,ListView 控件提供了兩個看似相似的選中相關事件:SelectedIndexChanged 和 ItemSelectionChanged。官方文檔(MSDN)及網上資料對兩者的區別說明往往不夠清晰,導致開發者難以選擇合適的事件。
| 特性 | SelectedIndexChanged | ItemSelectionChanged |
|---|---|---|
| 觸發時機 | 選中項的索引集合發生變化時 | 具體某一項的選中狀態發生變化時 |
| 事件參數 | EventArgs(無額外信息) |
ListViewItemSelectionChangedEventArgs(豐富上下文) |
| 可獲取信息 | 僅知選中索引變了,不知具體哪項、是選中還是取消 | 包含 Item(項對象)、ItemIndex、IsSelected(當前狀態) |
| 多選場景 | 批量選中時可能觸發多次,難以區分單項操作 | 每項狀態變化單獨觸發,精確感知單項操作 |
| 性能 | 較輕量 | 參數構建開銷稍大,但通常可忽略 |
// ItemSelectionChanged 事件處理
private void listView1_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e)
{
if (e.IsSelected)
{
Console.WriteLine($"項被選中: {e.Item.Text} (索引: {e.ItemIndex})");
// 可直接訪問 e.Item.SubItems 等豐富屬性
}
else
{
Console.WriteLine($"項取消選中: {e.Item.Text}");
}
}
優先使用 ItemSelectionChanged,除非極簡場景僅需索引變化通知。它提供的「項對象、索引、選中狀態」三元組信息,能顯著減少後續查找與判斷代碼,提升代碼可讀性與健壯性。