首页 > 编程笔记 > C#笔记 阅读:2

C# ListBox控件的用法(附带实例)

ListBox 可以翻译为清单,程序设计时可以将相同属性的项目数据放在一个列表内,可以单选或是复选。如果项目数据太多时,ListBox 会自动产生滚动条,这样可以避免清单外框占据太大的空间。

ListBox 常用属性

ListBox 的属性和其他控件的一样可以在属性窗口设定,或是使用程序代码设定,下列是其几个常用的属性。

ListBox 属性名称 说明
Items 这个属性是存放所有项目数据的集合,单击此属性右边的图标,可以看到字符串集合编辑器,在这里可以输入字符串(可想成项目)
MultiColumn ListBox 可以多字段显示,默认是 False,表示 1 个字段。如果更改此字段属性为 True,表示使用多字段显示
SelectedIndex 被选取列表项目的索引,索引值从 0 开始计数
SelectedIndices 当列表是多重选取时,可以由此属性取得所有被选取的索引,此外,也可以使用 SelectedIndices.Count 获得被选项目的数量
SelectedItem 列表项目被选取的项目名称
SelectedItems 当列表是多重选取时,可以由此属性取得所有被选取的项目,此外,也可以使用 SelectedItems.Count 获得被选项目数量
SelectionMode 默认是 One,表示只能选取一个项目,可以有下列选项:
  • None:不能选取。
  • MultiSimple:简单多重选取,单击未选项可以选取,某项目选取后再按一次此项目可以取消选取。
  • MultiExtended:可以使用 Shift 做连续项目区间选取和单独复选项目时要同时按 Ctrl 键
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(); // 输出选取项目
    }
}
执行结果:下列左图是程序刚执行的列表,右图是选取水果后的清单。

相关文章