C# ListBox列表控件的事件 作者:马育民 • 2025-09-12 22:31 • 阅读:10003 # 介绍 在 C# 的 Windows Forms 中,`ListBox` 控件的点击事件可以通过多种方式处理,常用的有选择项变化事件和鼠标点击事件。以下是具体实现方法: # 选择项变化事件(最常用) `SelectedIndexChanged` 事件在用户选择了不同项时触发(无论是通过鼠标点击还是键盘操作): ```csharp private void Form1_Load(object sender, EventArgs e) { // 给ListBox添加测试数据 listBox1.Items.Add("项目1"); listBox1.Items.Add("项目2"); listBox1.Items.Add("项目3"); // 绑定选择项变化事件 listBox1.SelectedIndexChanged += ListBox1_SelectedIndexChanged; } // 选择项变化时触发 private void ListBox1_SelectedIndexChanged(object sender, EventArgs e) { // 判断是否有选中项 if (listBox1.SelectedItem != null) { // 获取选中的文本 string selectedText = listBox1.SelectedItem.ToString(); // 获取选中的索引 int selectedIndex = listBox1.SelectedIndex; MessageBox.Show($"选中了: {selectedText},索引: {selectedIndex}"); } } ``` # 鼠标点击事件 如果需要严格响应鼠标点击(忽略键盘操作),可以使用 `MouseClick` 事件: ```csharp private void Form1_Load(object sender, EventArgs e) { listBox1.Items.Add("项目A"); listBox1.Items.Add("项目B"); listBox1.Items.Add("项目C"); // 绑定鼠标点击事件 listBox1.MouseClick += ListBox1_MouseClick; } private void ListBox1_MouseClick(object sender, MouseEventArgs e) { // 通过鼠标位置获取点击的项索引 int index = listBox1.IndexFromPoint(e.Location); if (index != ListBox.NoMatches) // 判断是否点击到了有效项 { string clickedItem = listBox1.Items[index].ToString(); MessageBox.Show($"鼠标点击了: {clickedItem}"); } else { // 点击了空白区域 // MessageBox.Show("点击了空白区域"); } } ``` # 双击事件 处理双击操作可以使用 `DoubleClick` 事件: ```csharp private void Form1_Load(object sender, EventArgs e) { listBox1.Items.Add("文件1.txt"); listBox1.Items.Add("文件2.txt"); // 绑定双击事件 listBox1.DoubleClick += ListBox1_DoubleClick; } private void ListBox1_DoubleClick(object sender, EventArgs e) { if (listBox1.SelectedItem != null) { MessageBox.Show($"双击了: {listBox1.SelectedItem}"); } } ``` # 总结 - `SelectedIndexChanged` 是处理选择变化的首选,它能响应鼠标和键盘(如上下箭头)的选择操作 - `IndexFromPoint(e.Location)` 方法可将鼠标坐标转换为对应的项索引 - 注意判断 `SelectedItem` 是否为 `null` 或索引是否有效,避免空引用异常 - 如果 `ListBox` 设置了 `SelectionMode` 为多项选择(如 `MultiSimple` 或 `MultiExtended`),可以通过 `SelectedItems` 集合获取所有选中项 根据实际需求选择合适的事件类型,通常 `SelectedIndexChanged` 能满足大多数场景。 原文出处:http://www.malaoshi.top/show_1GW1ql4sMWKT.html