用于列出选项的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中被选中项目的方法如下:

  1. 从0开始循环访问CheckedItems结合。注意,此方法提供的是已选中项列表而不是整个列表中的项目。因此,如果没选第一项而选了第二项,则下面的代码显示的文本类似于”Checked Item 1 = MyListItem 2”.
  2. / 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);
    }

  3. Items属性循环所有项,对每项调用GetItemChecked方法,也可以确认选中项:
  4. 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的过程一样,如下所示:

  1. 将DataSource属性设置为数据源对象。可能的数据源包括BindingSource, table,等。
  2. 如果是绑定到table,则需要将DisplayMember属性设置为需要显示的那一列的name。
时间: 2024-12-21 11:06:57

用于列出选项的Windows窗体控件的相关文章

如何跨线程调用Windows窗体控件

通过一个子线程来操作主线程中的控件,但是,这样作会出现一个问题(如图1所示),就是TextBox控件是在主线程中创建的,在子线程中并没有对其进行创建,也就是从不是创建控件的线程访问它.那么,如何解决跨线程调用Windows窗体控件呢?可以用线程委托实现跨线程调用Windows窗体控件.下面将上一个例子进行一下改动.代码如下: using System; using System.Collections.Generic; using System.ComponentModel; using Sys

c#中跨线程调用windows窗体控件

c#中跨线程调用windows窗体控件解决. 我们在做winform应用的时候,大部分情况下都会碰到使用多线程控制界面上控件信息的问题.然而我们并不能用传统方法来做这个问题,下面我将详细的介绍.首先来看传统方法: public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { Thread thre

c#中跨线程调用windows窗体控件 .我们在做winform应用的时候,大部分情况下都会碰到使用多线程控制界面上控件信息的问题。然而我们并不能用传统方法来做这个问题,下面我将详细的介绍。

首先来看传统方法: public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { Thread thread = new Thread(ThreadFuntion); thread.IsBackground = true; thread.Start(); } private void Thread

c#中如何跨线程调用windows窗体控件?(from www.sysoft.cc)

我们在做winform应用的时候,大部分情况下都会碰到使用多线程控制界面上控件信息的问题.然而我们并不能用传统方法来做这个问题 首先来看传统方法: public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { Thread thread = new Thread(ThreadFuntion); t

windows窗体控件之listview列表视图

1.添加标题 winform.listview.gridLines=true;//显示列表线,也可在属性表设置 winform.listview.insertColumn("列标题",列宽,位置,样式) winform.listview.insertColumn("标题2",列宽,位置,样式)//后加的在前面(若不注明位置) winform.listview.insertColumn("第一列", 40, 1); winform.listview

c#中如何跨线程调用windows窗体控件?

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Threading; //线程操作引用的命名空间 namespace windowform线程操作 { p

如何 对 Windows 窗体控件进行线程安全调用

//主线程 public delegate void UpdateMessage(string mes); public void UpdatePortMessage(string mes) { this.txtMessage.AppendText(string.Format("Connected {0}. succeed", mes) + "\r\n"); this.txtClientIP.Text = mes; } // 线程1 UpdateMessage up

VintaSoft Twain .net控件可用于桌面应用WinForm的扫描仪控件

VintaSoftTwain.NET SDK是成熟的扫描组件. 利用它, 程序员可以从.net和wpf的应用中控制的平板和ADF扫描仪,网络和数码相机和任何其他TWAIN设备. NET SDK提供的TWAIN .NET SDK 包括的两个版本:<标准版> 或 <标准+ WPF版本>. 功能特点: 完全兼容TWAIN 1.x和2.x标准规范编程环境:.NET Framework 2.0或以上, WPF 3.5 或以上.纯.NET 托管代码库,可保证在NET Framework框架下有

用于后台管理的列表数据控件:DataGrid和Select

常听人说不喜欢javascript.然而我一个一直用C#做后端的人,最喜欢的编程语言就是javascript了,我接收它的优点,也接收它的缺点! 前段时间接触过easyui,用过里面的DataGrid和Combobox等控件,感觉DataGrid的确减少了一些重复的工作,但是easyui改变原有的Element,比如textbox,不能用$("#id").val()获取值了,只能用$(“#id”).textbox('getValue')来获取,不喜欢这样.国庆放假,票到3号了,今天有时