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

相关推荐
flyingonpine41 分钟前
PowerShell脚本数字签名实战:自签名证书、代码签名与信任链验证
windows·信任链
用户3721574261352 小时前
C# 实现 Excel 单元格保护:锁定公式并允许编辑指定区域
c#·ai编程·编程语言
goehou7 小时前
让 AI 替我操作这台电脑,先把手能伸多远定下来
windows·自动化·权限管理·ai agent
公子小六7 小时前
基于.NET的Windows窗体编程之WinForms数据持久化(1)
windows·microsoft·c#·.net·winforms
三雷科技8 小时前
第6章第4节:自定义分词器
开发语言·c#
zhanghaha131410 小时前
C# 系列教程_12 字符串 string 保姆级系统教程(面向新手,大量示例 + 原理讲解)
开发语言·数据库·c#
2601_967987371 天前
安装 Redis 或 Redis Stack
linux·windows·redis·macos·安装
Coder_Shenshen1 天前
罗克韦尔ACD工程归档离线变量树解析
算法·c#
xbzb1 天前
自定义 yum 软件源:Linux 上 createrepo,Windows 上纯 Python 也能造
linux·运维·windows·python·yum·createrepo
武雄(小星Ai)1 天前
Ollama报llama-server binary not found排坑实录:服务活着引擎没了
人工智能·windows·大模型·ollama·排坑