ListBox控件用于显示一个项列表,用于选择一项或者多项.
1. 添加列表项
使用AddRange()方法:
public partial class Form1 : Form { public Form1() { InitializeComponent(); SetListBoxItems(); } private void SetListBoxItems() { this.listBox1.Items.AddRange(new String[]{"1000","1500","2000"}); } }
使用Add()方法:
public partial class Form1 : Form { public Form1() { InitializeComponent(); SetListBoxItems(); } private void SetListBoxItems() { this.listBox1.Items.Add("1000"); this.listBox1.Items.Add("1500"); this.listBox1.Items.Add("2000"); } }
使用Insert()方法
public partial class Form1 : Form { public Form1() { InitializeComponent(); SetListBoxItems(); } private void SetListBoxItems() { this.listBox1.Items.Insert(0, "1000"); //这里的0作为index不能省略 this.listBox1.Items.Insert(1, "2000"); this.listBox1.Items.Insert(1, "1500"); } }
上面三种方法的结果都是一样的:
2. 删除列表项目
使用Remove()方法
public partial class Form1 : Form { public Form1() { InitializeComponent(); SetListBoxItems(); } private void SetListBoxItems() { this.listBox1.Items.AddRange(new String[] { "1000", "1500", "2000" }); this.listBox1.Items.Remove("1500"); //移除一个对象 } }
使用RemoveAt()方法
public partial class Form1 : Form { public Form1() { InitializeComponent(); SetListBoxItems(); } //private void SetListBoxItems() //{ // this.listBox1.Items.AddRange(new String[] { "1000", "1500", "2000" }); // this.listBox1.Items.Remove("1500"); //} private void SetListBoxItems() { this.listBox1.Items.Add("1000"); this.listBox1.Items.Add("1500"); this.listBox1.Items.Add("2000"); this.listBox1.Items.RemoveAt(1); //移除指定下标的元素 }
使用Clear()方法
public partial class Form1 : Form { public Form1() { InitializeComponent(); SetListBoxItems(); } private void SetListBoxItems() { this.listBox1.Items.Insert(0, "1000"); this.listBox1.Items.Insert(1, "2000"); this.listBox1.Items.Insert(1, "1500"); this.listBox1.Items.Clear(); #清空所有列表项 } }
最后一个是啥都没有,对于前两个的结果:
3. 选项高度和宽度
IntegralHeight是一个Bool类型值,用来将能显示的项完全显示,而不会显示项的一部分.(无效)
ItemHeight 是一个int类型值,用来设置项的高度(无效)
ColumnWidth 设置项的宽度大小,一般如果多列显示的话会出现列宽很大,此时可以用此属性调整
PreferredHeight 设置项的最合适的高度,使得所有的项都能显示出来.
public partial class Form1 : Form { public Form1() { InitializeComponent(); SetListBoxHeight(); } private void SetListBoxHeight() { this.listBox1.Items.Insert(0, "1000"); this.listBox1.Items.Insert(1, "2000"); this.listBox1.Items.Insert(2, "1500"); this.listBox1.Items.Insert(3, "1000"); this.listBox1.Items.Insert(4, "2000"); this.listBox1.Items.Insert(5, "1500"); this.listBox1.Items.Insert(6, "1000"); this.listBox1.Items.Insert(7, "2000"); this.listBox1.Items.Insert(8, "1500"); //项加多一点 看上去直观 this.listBox1.Items.Insert(9,this.listBox1.CreateGraphics() .MeasureString(this.listBox1.Items[0].ToString(), this.listBox1.Font).Width); //这是获取项的宽度 this.listBox1.Items.Insert(10, this.listBox1.CreateGraphics() .MeasureString(this.listBox1.Items[0].ToString(), this.listBox1.Font).Height);//这是获取项的高度 this.listBox1.Height = this.listBox1.PreferredHeight; //设置最佳高度,使得所有项都显示出来 } }
在上面代码最后加上this.listBox1.MultiColumn=true则允许多列显示,结果如下:
4. 多选
Listbox支持SelectionMode枚举类型的选择,其中None无法进行选择,One最多选择一项,MultiSimple多选,但是不支持Shift和方向键,MultiSimple多选且支持Shift和方向键
public partial class Form1 : Form { public Form1() { InitializeComponent(); SetListBoxSelectionMode(); } private void SetListBoxSelectionMode() { this.listBox1.SelectionMode = SelectionMode.MultiExtended;//支持多选,且支持Shift和方向键 this.listBox1.Items.Add("第一个节点"); this.listBox1.Items.Add("第二个节点"); this.listBox1.Items.Add("第三个节点"); this.listBox1.Items.Add("第四个节点"); this.listBox1.Items.Add("第五个节点"); this.listBox1.Items.Add("第六个节点"); this.listBox1.Items.Add("第七个节点"); this.listBox1.Items.Add("第八个节点"); this.listBox1.Items.Add("第九个节点"); this.listBox1.Items.Add("第十个节点"); } private void button1_Click(object sender, EventArgs e) { String message = ""; for (int i = 0; i < this.listBox1.SelectedItems.Count;i++ ) { message = message + "所选节点的索引号是: " + this.listBox1.SelectedIndices[i] + "\n" + "所选节点的内容是: " + this.listBox1.SelectedItems[i].ToString() + "\n"; } MessageBox.Show(message); } }
5. 滚动条
HorizontalScrollbar属性来表示控件是否显示滚动条,ScrollAlwaysVisible属性设置滚动条是否总显示, HorizontalExtent属性定义或者获取水平滚动条的宽度
public partial class Form1 : Form { public Form1() { InitializeComponent(); SetListBoxSelectionMode(); SetListBoxScrollbar(); } private void SetListBoxSelectionMode() { this.listBox1.SelectionMode = SelectionMode.MultiExtended;//支持多选 this.listBox1.Items.Add("第一个节点"); this.listBox1.Items.Add("第二个节点"); this.listBox1.Items.Add("第三个节点"); this.listBox1.Items.Add("第四个节点"); this.listBox1.Items.Add("第五个节点"); this.listBox1.Items.Add("第六个节点"); this.listBox1.Items.Add("第七个节点"); this.listBox1.Items.Add("第八个节点"); this.listBox1.Items.Add("第九个节点"); this.listBox1.Items.Add("第十个节点"); } private void SetListBoxScrollbar() { this.listBox1.HorizontalScrollbar = true; //这一句是如果超出大小则显示水平滚动条,所以一般看不到 this.listBox1.ScrollAlwaysVisible = true; //这一句使得水平滚动条都会显示出来 this.listBox1.HorizontlExtent=this.listBox1.ColumnWidth*5;// 无效,理论上这样的话多列显示的时候最多显示5列 } private void button1_Click(object sender, EventArgs e) { String message = ""; for (int i = 0; i < this.listBox1.SelectedItems.Count;i++ ) { message = message + "所选节点的索引号是: " + this.listBox1.SelectedIndices[i] + "\n" + "所选节点的内容是: " + this.listBox1.SelectedItems[i].ToString() + "\n"; } MessageBox.Show(message); } }
6. Index
TopIndex启动界面的时候第一个显示的项是原给列表集合中的第TopIndex项,前TopIndex被隐藏在上面,用垂直滚动条查看.(无效)
SelectedIndex单选属性 用于获取选择项的索引值等价于多选中SelectedIndices[k]
7. 排序
使用Sotred属性,设置列表是否按照字典排序
public partial class Form1 : Form { public Form1() { InitializeComponent(); SetListBoxSelectionMode(); } private void SetListBoxSelectionMode() { this.listBox1.SelectionMode = SelectionMode.MultiExtended;//支持多选 this.listBox1.Items.Add("第一个节点"); this.listBox1.Items.Add("第三个节点"); this.listBox1.Items.Add("第二个节点"); this.listBox1.Items.Add("第七个节点"); this.listBox1.Items.Add("第五个节点"); this.listBox1.Items.Add("第八个节点"); this.listBox1.Items.Add("第十个节点"); this.listBox1.Items.Add("第四个节点"); this.listBox1.Items.Add("第九个节点"); this.listBox1.Items.Add("第六个节点"); this.listBox1.Sorted = true; } }
结果是按照音标进行排序的
8. 刷新
一般而言,对于新加的列表项,会每次进行自动刷新界面,这样不仅占用资源而且程序不稳定.当使用BeginUpdate()方法时候可以防止控件的绘图功能,EndUpdate()则可以重新开始控件绘图.
public partial class Form1 : Form { public Form1() { InitializeComponent(); AddItemToListBox(); } private void AddItemToListBox() { this.listBox1.BeginUpdate(); //这里指定listBox1不再绘图 for (int i = 0; i < 1000;i++ ) { this.listBox1.Items.Add("项" + i.ToString()); } //所以这里加项实际上不显示 this.listBox1.EndUpdate(); //到这里一下显示所有已经加的项 } }
9. 查找
FindString()方法用来查找ListBox控件中以指定字符串相匹配的项
public partial class Form1 : Form { public Form1() { InitializeComponent(); SetListBoxSelectionMode(); } private void SetListBoxSelectionMode() { this.listBox1.SelectionMode = SelectionMode.MultiExtended;//支持多选 this.listBox1.Items.Add("第一个节点"); this.listBox1.Items.Add("第三个节点"); this.listBox1.Items.Add("第二个节点"); this.listBox1.Items.Add("第七个节点"); this.listBox1.Items.Add("第五个节点"); this.listBox1.Items.Add("第八个节点"); this.listBox1.Items.Add("第十个节点"); this.listBox1.Items.Add("第四个节点"); this.listBox1.Items.Add("第九个节点"); this.listBox1.Items.Add("第六个节点"); this.listBox1.Sorted = true; } private void button1_Click(object sender, EventArgs e) { string searchText = this.txtFind.Text; if (searchText != null && searchText != "") { int index = this.listBox1.FindString(searchText); if (index != -1) { this.listBox1.SetSelected(index, true); //设置第index的项为选中状态,false为不选中 MessageBox.Show("在ListBox控件中的" + index.ToString() + "项具有" + searchText + "字符串"); } else { MessageBox.Show("在ListBox控件中没有匹配的项"); } } } }
如果有多个满足条件,则选择首先匹配到的项
还有一个重载方式是FindString(string,int)是从指定下标索引int的地方开始查找,其余和上面类似
另外上面的方法不能区分大小写,如果要区分则要求使用方法FindStringExact()方法
10. 其他常用方法
GetItemHeight() 获取指定项的高度
public partial class Form1 : Form { public Form1() { InitializeComponent(); SetListBoxSelectionMode(); } private void SetListBoxSelectionMode() { this.listBox1.SelectionMode = SelectionMode.MultiExtended;//支持多选 this.listBox1.Items.Add("第一个节点"); this.listBox1.Items.Add("第三个节点"); this.listBox1.Items.Add("第二个节点"); this.listBox1.Items.Add("第七个节点"); this.listBox1.Items.Add("第五个节点"); this.listBox1.Items.Add("第八个节点"); this.listBox1.Items.Add("第十个节点"); this.listBox1.Items.Add("第四个节点"); this.listBox1.Items.Add("第九个节点"); this.listBox1.Items.Add("第五个节点"); this.listBox1.Sorted = true; } private void button1_Click(object sender, EventArgs e) { int itemHeight = 0; int sumHeight = 0; int itemCount = 0; itemCount = this.listBox1.Items.Count; for (int i = 0; i < itemCount;i++ ) { itemHeight = this.listBox1.GetItemHeight(i); //获取指定下标i的项高度 sumHeight += itemHeight; } MessageBox.Show("所有项的高度总和为: " + sumHeight); } }
SetItemsCore() 该方法传入一些项的数组,首先清空原有的项然后将传入的数组项设置起来.(无效)
ClearSelected() 该方法清空所有选中的项,设为未选中
GetSelected() 方法获取指定的项是否是选中状态
SetSelected() 方法设置指定的项为选中或者非选中状态
public partial class Form1 : Form { public Form1() { InitializeComponent(); SetListBoxSelectionMode(); } private void SetListBoxSelectionMode() { this.listBox1.SelectionMode = SelectionMode.MultiExtended;//支持多选 this.listBox1.Items.Add("第一个节点"); this.listBox1.Items.Add("第三个节点"); this.listBox1.Items.Add("第二个节点"); this.listBox1.Items.Add("第七个节点"); this.listBox1.Items.Add("第五个节点"); this.listBox1.Items.Add("第八个节点"); this.listBox1.Items.Add("第十个节点"); this.listBox1.Items.Add("第四个节点"); this.listBox1.Items.Add("第九个节点"); this.listBox1.Items.Add("第五个节点"); this.listBox1.Sorted = true; } private void button1_Click(object sender, EventArgs e) { int itemCount = this.listBox1.Items.Count; for (int i = 0; i < itemCount;i++ ) { bool isSelected = this.listBox1.GetSelected(i); this.listBox1.SetSelected(i,!isSelected); //实现反选 } } }