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

相关推荐
钰fly18 分钟前
工具块与vs的联合编程(豆包总结生成)
c#
爱内卷的学霸一枚1 小时前
现代微服务架构实践:从设计到部署的深度解析
windows·微服务·架构
c#上位机1 小时前
wpf之行为
c#·wpf
zho_uzhou1 小时前
c++ imgui implot绘图使用示例 visual studio
开发语言·c++·visual studio
星夜泊客1 小时前
C# 基础:为什么类可以在静态方法中创建自己的实例?
开发语言·经验分享·笔记·unity·c#·游戏引擎
kylezhao20193 小时前
深入浅出地理解 C# WPF 中的属性
hadoop·c#·wpf
程序猿阿伟3 小时前
《Apple Silicon与Windows on ARM:引擎原生构建与模拟层底层运作深度解析》
arm开发·windows
软件资深者3 小时前
游戏组件DirectX修复工具(DirectX Repair)v4.4增强版
windows·游戏·电脑·系统修复
多多*3 小时前
2月3日面试题整理 字节跳动后端开发相关
android·java·开发语言·网络·jvm·adb·c#
By北阳4 小时前
Windows 系统中 存储信息加载异常的表现,所有数值都显示为 “0000000” 乱码
windows