C# ListBox控件的用法(附带实例)
ListBox 可以翻译为清单,程序设计时可以将相同属性的项目数据放在一个列表内,可以单选或是复选。如果项目数据太多时,ListBox 会自动产生滚动条,这样可以避免清单外框占据太大的空间。
【实例 1】使用字符串编辑器创建列表。首先使用
工具在窗体内创建列表,结果如下所示:
然后请单击属性窗口 Items 属性右边的
图标,就可以创建字符串集合编辑器:
上述每一行请输入一个项目数据,下面是笔者的输入实例,输入完单击“确定”按钮后,清单就创建完成。
执行结果:下列是单击不同项目的列表界面。
注意,当 SelectionMode 是 One 时,某项目被选取后,单击此项目无法取消选取,如果单击其他项原先被选取的会被取消选取,因为会保持一个项目被选取。
【实例 2】扩充实例 1,将列表 listBox1 的 SelectionMode 属性改为 MultiSimple,列表内容则是一样,同时 Sorted 属性改为 True。
执行结果:因为没有程序,笔者简化程序,可以看到列表项目已经自动排序,结果如下所示。
另外,为了方便可以先创建字符串数组,再使用循环,整个清单的创建就会变得很容易。
【实例 3】使用程序概念重新设计实例 2。
此程序的一个特色是有 From1_Load 事件,程序开始执行时会自动启动 Form1 窗体的 Load 事件,这个程序用此事件调用 InitializeMyListBox() 方法。这个方法内笔者使用程序可以复选、排序和循环创建列表数据。
上述程序第 21~22 行笔者使用循环,循环内有 Add() 方法可将水果数组加入列表,更简洁的方式是使用 AddRange() 方法,详情可以参考下列实例。
【实例 4】使用 Insert() 方法插入列表项目的应用,这一个方案基本上重新了设计实例 3,但是将水果改为中文名称,取消排序和复选,同时增加指定索引位置在该位置插入水果,让水果项目超出 listBox1 的高度,这时可以看到 listBox1 自动出现垂直滚动条。
注意,如果没有项目被选取,如在项目刚执行时,则 SelectedIndex 的值是 -1。
【实例 5】使用 SelectedIndexChanged 事件和 SelectedItem 属性,列出选取的项目。
注意,因为 label1 没有 Text,所以可能会看不到,这时单击属性窗口右上方的图标,就可以显示。
ListBox 常用属性
ListBox 的属性和其他控件的一样可以在属性窗口设定,或是使用程序代码设定,下列是其几个常用的属性。ListBox 属性名称 | 说明 |
---|---|
Items | 这个属性是存放所有项目数据的集合,单击此属性右边的图标,可以看到字符串集合编辑器,在这里可以输入字符串(可想成项目) |
MultiColumn | ListBox 可以多字段显示,默认是 False,表示 1 个字段。如果更改此字段属性为 True,表示使用多字段显示 |
SelectedIndex | 被选取列表项目的索引,索引值从 0 开始计数 |
SelectedIndices | 当列表是多重选取时,可以由此属性取得所有被选取的索引,此外,也可以使用 SelectedIndices.Count 获得被选项目的数量 |
SelectedItem | 列表项目被选取的项目名称 |
SelectedItems | 当列表是多重选取时,可以由此属性取得所有被选取的项目,此外,也可以使用 SelectedItems.Count 获得被选项目数量 |
SelectionMode |
默认是 One,表示只能选取一个项目,可以有下列选项:
|
Sorted | 是否将列表项目排序,默认是 False,表示不排序 |
TopIndex | 如果设为 0,可以将列表选项卷动到最上方,适用在有滚动条清单 |
【实例 1】使用字符串编辑器创建列表。首先使用


然后请单击属性窗口 Items 属性右边的


上述每一行请输入一个项目数据,下面是笔者的输入实例,输入完单击“确定”按钮后,清单就创建完成。

执行结果:下列是单击不同项目的列表界面。

注意,当 SelectionMode 是 One 时,某项目被选取后,单击此项目无法取消选取,如果单击其他项原先被选取的会被取消选取,因为会保持一个项目被选取。
【实例 2】扩充实例 1,将列表 listBox1 的 SelectionMode 属性改为 MultiSimple,列表内容则是一样,同时 Sorted 属性改为 True。
执行结果:因为没有程序,笔者简化程序,可以看到列表项目已经自动排序,结果如下所示。

ListBox常用的方法
我们已经接触了许多一般集合或泛型集合,也学会了 Add()、Insert() 方法等,这些方法可以用来创建列表项目或进行更多操作,此时语法如下:listBox1.Items.Add(项目); // 增加清单 listBox1.Items.AddRange(项目数组); // 增加项目数组 listBox1.Items.Insert(index, 项目); // 在特定索引插入项目 listBox1.Items.Clear(); // 清除列表项目 listBox1.Items.Remove(项目); // 删除特定项目 listBox1.Items.RemoveAt(index); // 删除特定索引的项目 bool rtn = listBox1.Items.Contains(项目); // 是否列表包含此项目
另外,为了方便可以先创建字符串数组,再使用循环,整个清单的创建就会变得很容易。
【实例 3】使用程序概念重新设计实例 2。
public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { InitializeMyListBox(); } private void InitializeMyListBox() { string[] fruits = { "Banana", "Watermelon", "Apple", "Orange", "Pineapple" }; // 可以复选 listBox1.SelectionMode = SelectionMode.MultiSimple; listBox1.Sorted = true; // 排序 // 将水果列表加入listBox1 for (int i = 0; i < fruits.Length; i++) listBox1.Items.Add(fruits[i]); } }执行结果与实例 2 相同。
此程序的一个特色是有 From1_Load 事件,程序开始执行时会自动启动 Form1 窗体的 Load 事件,这个程序用此事件调用 InitializeMyListBox() 方法。这个方法内笔者使用程序可以复选、排序和循环创建列表数据。
上述程序第 21~22 行笔者使用循环,循环内有 Add() 方法可将水果数组加入列表,更简洁的方式是使用 AddRange() 方法,详情可以参考下列实例。
【实例 4】使用 Insert() 方法插入列表项目的应用,这一个方案基本上重新了设计实例 3,但是将水果改为中文名称,取消排序和复选,同时增加指定索引位置在该位置插入水果,让水果项目超出 listBox1 的高度,这时可以看到 listBox1 自动出现垂直滚动条。
public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { InitializeMyListBox(); } private void InitializeMyListBox() { string[] fruits = { "香蕉", "西瓜", "苹果", "橘子", "菠萝" }; // 将水果列表加入 listBox1 listBox1.Items.AddRange(fruits); listBox1.Items.Insert(1, "芒果"); // 索引 1 插入芒果 listBox1.Items.Insert(3, "葡萄"); // 索引 3 插入葡萄 listBox1.Items.Insert(5, "草莓"); // 索引 5 插入草莓 } }执行结果为:

C# ListBox常用事件
ListBox 可以创建列表,在列表中我们可以单选或是复选项目,每次有更动选取后,SelectedIndex 和 SelectedItem 属性值就会改变,我们可以由这两个属性值了解到哪些项目被选取。同时因为这两个属性值的改变会触发 SelectedIndexChanged 事件,所以我们可以用这个事件设计相关应用。注意,如果没有项目被选取,如在项目刚执行时,则 SelectedIndex 的值是 -1。
【实例 5】使用 SelectedIndexChanged 事件和 SelectedItem 属性,列出选取的项目。

注意,因为 label1 没有 Text,所以可能会看不到,这时单击属性窗口右上方的图标,就可以显示。

控件 | 名称 | 标题 (Text) | 大小 (Size) | 位置 (Location) |
---|---|---|---|---|
Form | Form1 | ch30_21_2 | (500, 300) | (0, 0) |
ListBox | listBox1 | (180, 142) | (149, 26) | |
Label | label1 | (0, 23) | (207, 197) |
public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { InitializeMyListBox(); } private void InitializeMyListBox() { string[] fruits = { "香蕉", "西瓜", "苹果", "橘子", "菠萝" }; // 将水果串行加入listBox1 listBox1.Items.AddRange(fruits); } private void listBox1_SelectedIndexChanged(object sender, EventArgs e) { if (listBox1.SelectedItem != null) // 如果有选取 label1.Text = listBox1.SelectedItem.ToString(); // 输出选取项目 } }执行结果:下列左图是程序刚执行的列表,右图是选取水果后的清单。
