WinForm真入门(13)——ListBox控件详解

WinForm ListBox 详解与案例


一、核心概念

‌ListBox‌ 是 Windows 窗体中用于展示可滚动列表项的控件,支持单选或多选操作,适用于需要用户从固定数据集中选择一项或多项的场景‌。

二、核心属性

属性 说明
‌Items‌ 管理列表项的集合,支持动态增删(如 Add()、Remove())‌。
‌SelectedIndex‌ 获取或设置选中项的索引(未选中时为 -1)‌。
‌SelectedItem‌ 获取当前选中的项对象‌。
‌SelectionMode‌ 设置选择模式:Single(默认)、MultiSimple 或 MultiExtended‌。
‌Sorted‌ 是否按字母顺序自动排序项‌。
‌ScrollAlwaysVisible‌ 始终显示滚动条(即使内容未超出可视区域)‌。

三、核心方法与事件

1‌、常用方法‌

  • Items.Add()‌:添加新项‌。
csharp 复制代码
listBox1.Items.Add("新项");

。‌Items.RemoveAt()‌:根据索引删除项‌

csharp 复制代码
listBox1.Items.RemoveAt(0); // 删除第一项
  • ClearSelected()‌:取消所有选中项‌。

2‌、重要事件‌

‌SelectedIndexChanged‌:选中项变化时触发‌。

csharp 复制代码
private void listBox1_SelectedIndexChanged(object sender, EventArgs e) {
    if (listBox1.SelectedItem != null) {
        MessageBox.Show($"选中项:{listBox1.SelectedItem}");
    }
}

四、完整案例

案例1:动态增删项
‌需求‌:通过按钮动态添加和删除列表项。
‌实现代码‌:

csharp 复制代码
// 添加项
private void btnAdd_Click(object sender, EventArgs e) {
    listBox1.Items.Add(txtInput.Text);
    txtInput.Clear();
}

// 删除选中项
private void btnDelete_Click(object sender, EventArgs e) {
    if (listBox1.SelectedIndex != -1) {
        listBox1.Items.RemoveAt(listBox1.SelectedIndex);
    }
}

‌说明‌:输入框 txtInput 用于接收用户输入,删除时需检查是否有选中项‌。


案例2:多选操作与数据绑定
‌需求‌:从数据库加载数据并支持多选。
‌实现代码‌:

// 绑定数据源(示例使用List模拟数据库数据)

csharp 复制代码
private void Form1_Load(object sender, EventArgs e) {
    List<string> data = new List<string> { "北京", "上海", "广州", "深圳" };
    listBox1.DataSource = data;
    listBox1.SelectionMode = SelectionMode.MultiExtended; // 启用扩展多选
}

// 获取所有选中项
private void btnShowSelected_Click(object sender, EventArgs e) {
    var selectedItems = listBox1.SelectedItems.Cast<string>().ToList();
    MessageBox.Show($"选中城市:{string.Join(", ", selectedItems)}");
}

‌说明‌:DataSource 属性支持绑定集合数据,SelectionMode 控制多选模式‌。


案例3:排序与批量删除
‌需求‌:自动排序列表项,并批量删除符合条件的项。
‌实现代码‌

csharp 复制代码
// 启用排序
listBox1.Sorted = true;

// 批量删除包含"测试"的项
private void btnBatchDelete_Click(object sender, EventArgs e) {
    for (int i = listBox1.Items.Count - 1; i >= 0; i--) {
        if (listBox1.Items[i].ToString().Contains("测试")) {
            listBox1.Items.RemoveAt(i); // 倒序删除避免索引错位
        }
    }
}

‌说明‌:倒序遍历避免因删除导致索引变化‌。


五、注意事项

‌性能优化‌:批量操作时使用 BeginUpdate() 和 EndUpdate() 减少界面刷新次数‌。

csharp 复制代码
listBox1.BeginUpdate();
for (int i = 0; i < 1000; i++) {
    listBox1.Items.Add($"Item {i}");
}
listBox1.EndUpdate();

‌索引管理‌:删除多项时需倒序操作,避免索引越界‌。


总结

ListBox 是 WinForm 中灵活且功能丰富的列表控件,通过合理使用 Items 集合、SelectionMode 及事件机制,可实现动态数据管理、多选交互等复杂场景。开发时需注意性能优化和索引逻辑,避免常见错误‌

相关推荐
挣扎的蓝藻4 小时前
使用 Python 扫描 Windows 下的 Wi-Fi 网络实例演示
网络·windows·python
cdg==吃蛋糕4 小时前
windows sc 创建删除服务
windows
yagerfgcs5 小时前
【配置Visual Assistant VC助手 for Visual Studio 2017】
ide·c#·visual studio
再玩一会儿看代码5 小时前
[特殊字符] 深入理解 WSL2:在 Windows 上运行 Linux 的极致方案
linux·运维·windows·经验分享·笔记·学习方法
cyz1410016 小时前
树莓派4B配置wifi热点,可访问http协议
linux·网络·windows·后端·网络协议·http·树莓派
神州永泰7 小时前
Java logback框架日志输出中文乱码的解决方案(windows)
java·windows·logback
佟格湾10 小时前
聊透多线程编程-线程池-6.C# APM(异步编程模型)
开发语言·后端·c#·多线程
我不是程序猿儿11 小时前
【C#】一种优雅的基于winform的串口通信管理
stm32·单片机·c#
Java&Develop12 小时前
redis 免安装版本 启动方法 windows 安装包
数据库·windows·redis