用于列出选项的Windows窗体控件
可以提供选项列表的控件有ListBox、ComboBox、CheckedListBox,如何正确的使用和选择这些控件,下面对此进行讨论。首先对这三种控件的功能分别进行说明:
ListBox
ListBox用于显示项列表,用户可以从中选择一项或多项。如果项目总数超出可以显式的项目数,则ListBox会自动添加滚动条。当MultiColumn属性为true时,列表框以多列形式显示条目,并且会出现一个水平滚动条。当MultiColumn为false时,列表框以单列形式显示条目,并且会出现一个垂直滚动条。当ScrollAlwaysVisible为true时,无论条目多少都会显示滚动条。SelectionMode属性用于设置一次可以选择多少条目。
更改ListBox控件的方法
SelectedIndex属性返回列表框中第一个被选条目对应的整数。通过在代码中更改SelectedIndex值,可以更改选定项;而被选择的条目在窗口上突出显示。如果未选择任何项,则SelectedIndex的值为-1,如果选择的是第一项,则SelectedIndex值为0。当选择多项,SelectedIndex值表示第一个被选择的条目。
SelectedItem属性类似于SelectedIndex,不过它代表条目本身,通常为字符串。
Count属性表示列表中项目数,由于SelectedIndex是从零开始的,所以Count属性的值通常比SelectedIndex的最大可能值大1.
添加或删除条目:Add、Insert、Clear或Remove。也可以在开始使用Items属性向列表中添加项。
重点:判断选择的条目,设置滚动条,添加删除条目。
ComboBox
ComboBox控件以下拉框的方式显示数据。ComboBox默认分两部分显示:顶部是一个允许用户键入列表项的文本框;下面是一个列表框,它显示一个项列表。
SelectedIndex,Count, SelectedItem, Add, Remove, Insert, Clear的功能同ListBox完全一样。
CheckedListBox
CheckedListBox对ListBox进行了扩展。它几乎可以完成ListBox可以完成的所有任务,并且还可以在列表项旁边显示复选标记。两个之间的差异在于,CheckedListBox只支持DrawMode.Normal模式;并且CheckedListBox只能有0或1项没选中。
CheckedListBox在设计时在String Collection Editor中添加好条目,也可以使用Items属性动态添加。
确定CheckedListBox的选择项
当以CheckedListBox显示数据时,可以通过CheckedItems属性循环访问所有数据,并且可通过GetItemChecked方法确定哪些项被选中了。GetItemChecked方法参数以项目索引为参数,返回bool值。而SelectedItems和SelectedIndices属性不用于确定被选中的项,而用于表示突出显示的项目。
确定CheckedListBox中被选中项目的方法如下:
- 从0开始循环访问CheckedItems结合。注意,此方法提供的是已选中项列表而不是整个列表中的项目。因此,如果没选第一项而选了第二项,则下面的代码显示的文本类似于”Checked Item 1 = MyListItem 2”.
- Items属性循环所有项,对每项调用GetItemChecked方法,也可以确认选中项:
/ Determine if there are any items checked.
if(checkedListBox1.CheckedItems.Count != 0)
{
// If so, loop through all checked items and print results.
string s = "";
for(int x = 0; x <= checkedListBox1.CheckedItems.Count - 1 ; x++)
{
s = s + "Checked Item " + (x+1).ToString() + " = " + checkedListBox1.CheckedItems[x].ToString() + "\n";
}
MessageBox.Show (s);
}
int i;
string s;
s = "Checked items:\n" ;
for (i = 0; i <= (checkedListBox1.Items.Count-1); i++)
{
if (checkedListBox1.GetItemChecked(i))
{
s = s + "Item " + (i+1).ToString() + " = " + checkedListBox1.Items[i].ToString() + "\n";
}
}
MessageBox.Show (s);
何时使用ComboBox而非ListBox
ComboBox和ListBox具有相似行为,在某些情况下可以互换。使用建议如下:
当你想提供一组建议选项时,使用ComboBox;如果要限制输入或确定选项列表确定,用ListBox。ComboBox包含一个文本框,因此可以输入列表中没有的选项,不过当其DropDownStyle属性设置为DropDownList时除外,此时当你键入的第一个字母与某个条目匹配,会自动选择该条目。
另外,ComboBox比较节省空间,这点很好理解。不过在DropDownStyle设置为Simple时,会一直显示完整列表,此时ComboBox占用的空间反倒比ListBox多。
对ComboBox,ListBox,CheckedListBox的内容排序
Windows窗体控件绑定到数据时,是不支持排序的,若要排序数据,必须使用支持排序的数据源,然后对数据源进行排序。
如果不是数据绑定控件,可以按以下方法进行排序:
- 将Sorted属性设置为true。
是不是很简单……
如何将ComboBox和ListBox绑定到数据
将ComboBox和ListBox绑定到数据,可以方便进行数据库浏览,添加新数据,编辑现有数据等工作。
绑定ComboBox和ListBox的过程一样,如下所示:
- 将DataSource属性设置为数据源对象。可能的数据源包括BindingSource, table,等。
- 如果是绑定到table,则需要将DisplayMember属性设置为需要显示的那一列的name。
用于列出选项的Windows窗体控件的更多相关文章
- 如何:对 Windows 窗体控件进行线程安全调用
http://msdn.microsoft.com/zh-cn/library/ms171728(VS.90).aspx http://msdn.microsoft.com/zh-cn/library ...
- c#中跨线程调用windows窗体控件
c#中跨线程调用windows窗体控件解决. 我们在做winform应用的时候,大部分情况下都会碰到使用多线程控制界面上控件信息的问题.然而我们并不能用传统方法来做这个问题,下面我将详细的介绍.首先来 ...
- c#中如何跨线程调用windows窗体控件
c#中如何跨线程调用windows窗体控件? 我们在做winform应用的时候,大部分情况下都会碰到使用多线程控制界面上控件信息的问题.然而我们并不能用传统方法来做这个问题,下面我将详细的介绍.首 ...
- 如何跨线程调用Windows窗体控件
通过一个子线程来操作主线程中的控件,但是,这样作会出现一个问题(如图1所示),就是TextBox控件是在主线程中创建的,在子线程中并没有对其进行创建,也就是从不是创建控件的线程访问它.那么,如何解决跨 ...
- Windows窗体控件实现内容拖放(DragDrop)功能
一.将控件内容拖到其他控件 在开发过程中,经常会有这样的要求,拖动一个控件的数据到另外一个控件中.例如将其中一个ListBox中的数据拖到另一个ListBox中.或者将DataGridView中的数据 ...
- c#中如何跨线程调用windows窗体控件?
我们在做winform应用的时候,大部分情况下都会碰到使用多线程控制界面上控件信息的问题.然而我们并不能用传统方法来做这个问题,下面我将详细的介绍.首先来看传统方法: public partial c ...
- vs2017 C# ActiveX浏览器插件 创建 发布 C# windows窗体控件库(.NET Framework)注意事项
vs2017需要安装插 插件下载地址:https://marketplace.visualstudio.com/items?itemName=VisualStudioProductTeam.Micro ...
- 如何 对 Windows 窗体控件进行线程安全调用
//主线程 public delegate void UpdateMessage(string mes); public void UpdatePortMessage(string mes) { th ...
- KRBTabControl(中文)Windows选项卡控件
本文阐述了如何在C#使自定义Windows选项卡控件. Download demo project - 82.4 KB Download source - 252 KB 介绍 本文讨论如何使用.NET ...
随机推荐
- servlet执行流程
视频地址:http://www.imooc.com/video/5550 1-6 用户输入地址:localhost:8080/MyFirstServletDemo/index.jsp (My ...
- enmo_day_04
数据库名称 : PROD1 update employees set salary = salary + 1000 where LAST_NAME = ‘Bell’; select LAST_NAME ...
- Sql 注意点
1. Set.Select赋值 使用SELECT语句来替代SET命令的主要优点是:可以在一个操作内同时给多个变量赋值.执行下面的SELECT语句,通过SELECT语句赋值的变量就可以用于任何操作了. ...
- Python的平凡之路(4)
一.迭代器&生成器 生成器定义: 通过列表生成式,我们可以直接创建一个列表.但是,受到内存限制,列表容量肯定是有限的.而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅 ...
- 修改input的type属性
在ff和chrome中是可以直接修改input的type属性的,但是在ie下面是不允许的. 用jquery 的attr方法去修改,在jquery1.8.3版本会直接抛出异常,但在1.9及以上版本就不再 ...
- 黑马程序员——【Java基础】——File类、Properties集合、IO包中的其他类
---------- android培训.java培训.期待与您交流! ---------- 一.File类 (一)概述 1.File类:文件和目录路径名的抽象表现形式 2.作用: (1)用来将文件或 ...
- 【转】Lua coroutine 不一样的多线程编程思路
Lua coroutine 不一样的多线程编程思路 Sunday, Apr 26th, 2009 by Tim | Tags: coroutine, Lua 上周末开始看<Lua程序设计> ...
- python学习:函数的学习
我们写东东的时候,往往有一些东西要频繁去复用,那么每个功能是10行代码,复用2次就是20行,这样看来我们的程序如果频繁利用某些代码的话,那么会是我们开发的东西越来越臃肿.那么好的方法有没有呢,那就是函 ...
- 十分钟了解分布式计算:Petuum
Petuum是一个机器学习专用分布式计算框架,本文介绍其架构,并基于文章 More Effective Distributed ML via a Stale Synchronous Parallel ...
- LintCode Count 1 in Binary
知识点 1. 整数的二进制表示法 2. 十进制和二进制的转换 http://baike.baidu.com/view/1426817.htm 3. 负整数的表示(原码,补码,反码) http://ww ...