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 及事件机制,可实现动态数据管理、多选交互等复杂场景。开发时需注意性能优化和索引逻辑,避免常见错误‌

相关推荐
zhangfeng11332 分钟前
Windows 的 Git Bash 中使用 md5sum 命令非常简单 md5做文件完整性检测 WinRAR 可以计算文件的 MD5 值
人工智能·windows·git·bash
FL162386312922 分钟前
[C#][winform]segment-anything分割万物部署onnx模型一键抠图演示
开发语言·c#
彭波3961 小时前
.NET Framework 3.5问题修复教程!可以离线修复
windows·安全·电脑·.net·开源软件
love530love2 小时前
OpenClaw 手机直连配置全流程
人工智能·windows·python·智能手机·c#·agent·openclaw
bcbobo21cn3 小时前
C# byte类型和byte数组的使用
开发语言·c#·字节数组·byte类型
月巴月巴白勺合鸟月半5 小时前
一次PDF文件的处理(一)
pdf·c#
AnalogElectronic6 小时前
windows递归遍历当前目录下文件并重命名程序
windows
web3.08889996 小时前
taoxi商品详情|商品属性|包装规格信息 API接口
windows
大鹏说大话7 小时前
Java 锁膨胀机制深度解析:从偏向锁到重量级锁的进化之路
开发语言·c#
新手88607 小时前
Oracle VirtualBox虚拟机安装 和 安装 window11版本虚拟机 及 启用EFI和硬盘无法使用 问题
服务器·windows·计算机网络·安全·虚拟机