一、ComboBox控件
ComboBox控件用于在下拉组合框中显示数据。主要由两部分组成:一个允许 用户输入列表项的文本框,一个列表框。
1、创建只可以选择的下拉框
通过DropDownStyle属性,可将ComboBox控件设置为可选择的下拉框。DropDownStyle属性有3个属性值,分别对应不同的样式。
- Simple:ComboBox控件的列表部分总是可见
- DropDown::默认值,用户可以编辑ComboBox控件的文本部分, 只有单击右侧的箭头时才显示列表部分。
- DropDownList::用户不能编辑ComboBox控件的文本框部分,呈现下拉框的样式。
将控件的DropDownStyle属性设置为DropDownList,控件就只能是可以选择的下拉框,不能编辑文本框部分的内容。
例:设置只能进行选择的下拉框
创建一个Windows窗体应用程序,将ComboBox控件的DropDownStyle属性设置为DropDownList,并且向控件中添加3个项目,使其成为只可以进行选择操作的下拉框
private void Form1_Load(object sender,EventArgs e) //窗体的Load事件
{
//设置DropDownStyle属性,使控件呈现下拉框的样式
comboBox1.DropDownStyle = ComboBoxStyle.DropDownList;
comboBox1.Items.Add("支付宝");
comboBox1.Items.Add("微信支付");
comboBox1.Items.Add("京东白条");
}
2、选中下拉框中可编辑部分的所有文本
通过SelectAll()方法,可以选择ComboBox控件的可编辑部分的所有文本,语法格式如下
public void SelectAll()
使用SelectAll()方法之前,要将控件的DropDownStyle属性设置为DropDown,这样才能在文本框部分对选择项进行编辑。
例:选中下拉框中的所有项目
创建一个Windows窗体应用程序,将控件的DropDownStyle属性设置为DropDown,然后向控件中添加3个项目。选择下拉框中的某项,然后单击“选择”按钮调用控件的SelectAll()方法。当再次查看下拉框时,可以看到可编辑文本框中的内容已经被选中
private void Form1_Load(object sender,EventArgs e)
{
//设置DropDownStyle属性,使控件呈现下拉框的样式
comboBox1.Items.Add("支付宝");
comboBox1.Items.Add("微信支付");
comboBox1.Items.Add("京东白条");
}
private void button1_Click(object sender,EventArgs e)
{
//使用SelectAll方法。当再次查看下拉列表时,可以看到可编辑文本框中的内容已经被选中
comboBox1.SelectAll();
}
3、响应下拉框的选项值更改事件
当下拉框的选择项发生改变时,将会引发控件的SelectedValueChanged事件中,使Label控件的Text属性等于控件的选择项,代码如下
private void Form1_Load(object sender,EvenArgs e)
{
//设置DropDownStyle属性,使控件呈现下拉框的样式
comboBox1.DropDownStyle = ComboBoxStyle.DropDown;
//向控件中添加项目
comboBox1.Items.Add("支付宝");
comboBox1.Items.Add("微信支付");
comboBox1.Items.Add("京东白条");
]
private void comboBox1_SelectedValueChanged(object sender,EventArgs e)
{
//在控件的SeletedValueChanged事件中,使Label控件的Text属性等于控件的选择项
Label1.Text = comboBox1.Text;
}
二、CheckBox控件
CheckBox控件用来表示是否选取了某个选项条件,常用于为用户提供具有是/否或真/假值的选项
1、判断复选框是否选中
通过在控件的Click事件中判断CheckState属性的返回值,可得知复选框是否被选中。CheckState属性的返回值有两个:Checked表示控件处于选中状态;Unchecked表示控件处于取消选中状态。
例:判断复选框是否被选中
创建一个Windows窗体应用程序,在控件的Click事件中判断控件是否被选中,并弹出相应的提示
private void checkBox1_Click(object sender, EventArgs e)
{
if (checkBox1.CheckState == CheckState.Checked)
{
MessageBox.Show("CheckBox控件被选中");
}
else
{
MessageBox.Show("CheckBox控件选择被取消");
}
}
2、响应复选框的选中状态更改事件
当控件的选择状态发生变化时,将会引发控件的CheckStateChanged事件。
例:触发复选框的选中状态更改事件
创建一个Windows窗体应用程序,在控件的CheckStateChanged事件中编写代码,实现当控件的选择状态发生改变时,弹出提示框
private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
MessageBox.Show("控件的选择状态发生变化");
}
三、RadioButton控件
RadioButton控件为用户提供由两个或多个互斥选项组成的选项集。当用户选中某单选按钮时,同意组中的其他单选按钮不能同时选定。
1、判断单选按钮是否被选中
通过在控件的Click事件中判断Checked属性的返回值,可以判断单选按钮是否被选中。如果返回值时true,则控件处于被选中状态;返回值为false,则控件处于取消选中状态。
例:判断单选按钮是否被选中
创建一个Windows窗体应用程旭,在窗体中添加两个RadioButton控件,分别在两个控件的Click事件中通过if语句判断控件的Checked属性的返回值是否为true,代码如下
private void Form1_Load(object sender, EventArgs e)
{
radioButton1.Checked = false;
radioButton2.Checked = false;
}
private void radioButton1_Click(object sender, EventArgs e)
{
if (radioButton1.Checked)
{
MessageBox.Show("RadioButton1被选中");
}
}
private void radioButton2_Click(object sender, EventArgs e)
{
if (radioButton2.Checked)
{
MessageBox.Show("RadioButton2被选中");
}
}
2、响应单选按钮的选中状态更改事件
当控件的选中状态发生更改时,会引发控件的CheckedChanged事件。
例:单选按钮选中状态更改时执行操作
创建一个Windows窗体应用程序,在窗体中添加一个RadioButton控件和两个Button控件,单击Button1按钮,选中RadioButton控件;单击Button2,取消RadioButton控件的选中状态,代码如下
private void radioButton1_CheckedChanged(object sender, EventArgs e)
{
MessageBox.Show("RadioButton1控件的选中状态被改变");
}
private void button1_Click(object sender, EventArgs e)
{
radioButton1.Checked= true;
}
private void button2_Click(object sender, EventArgs e)
{
radioButton1.Checked = false;
}
private void Form1_Load(object sender, EventArgs e)
{
radioButton1.Checked = false;
}
四、NumericUpDown控件
NumericUpDown控件是一个显示和输入数值的控件。该控件提供一对上下箭头,用户可通过上下箭头选择数值,也可以直接输入数值。其Maximum属性用于设置数值允许的最大值,如果用户输入的数值大于该值,程序会自动修改数值为最大值。同理,Minimum属性用于设置数值允许的最小值,如果用户输入的数值小于该值,程序会自动修改数值为最小值。
1、获取NumericUpDown控件中显示的数值
通过控件的Value属性,可以获取NumericUpDown控件中显示的数值
例:实时获取选择的数字
创建一个Windows窗体应用程序,向窗体中添加一个Label控件,在窗体的Load事件中,首先设置控件的Maximum属性为20,Minimum属性为1。当控件的值发生改变时,通过Labe控件显示更改后的控件中的数值,代码如下
private void Form1_Load(object sender, EventArgs e)
{
numericUpDown1.Maximum = 20;
numericUpDown1.Minimum = 1;
}
private void numericUpDown1_ValueChanged(object sender, EventArgs e)
{
label1.Text = "当前控件中显示的数值:" + numericUpDown1.Value;
}
2、设置NumericUpDown控件中数值的显示方式
DecimalPlaces属性用于确定在小数点后显示几位数,默认值为0。ThousandsSeparator属性用于确定是否每隔3个十进制数字位就插入一个分隔符,默认情况下为false。Hexadecimal属性为true,则该控件可以用十六进制(而不是十进制格式)显示值,默认情况下为false。
例:设置NumericUpDown控件中显示小数
创建一个Windows窗体应用程序,通过设置NumericUpDown控件的DecimalPlaces属性,可以使控件中数值的小数点后显示3位数,代码如下
private void Form1_Load(object sender, EventArgs e)
{
numericUpDown1.Maximum = 20;
numericUpDown1.Minimum = 1;
numericUpDown1.DecimalPlaces= 3;
}
五、ListBox控件
ListBox控件用于显示一个列表,用户可从中选择一项或多项。如果选项总数超出可以显示的项数,则自动添加滚动条。
1、在ListBox控件中添加和移除项目
Items属性的Add()方法用于向ListBox控件中添加项目,Remove()方法用于移除选中的项目
例:向ListBox控件中添加和移除项目
创建一个Windows窗体应用程序,通过ListBox控件中Items属性的Add()方法和Remove()方法,实现向控件中添加项目以及移除项目,代码如下
private void button1_Click(object sender, EventArgs e)
{
if (textBox1.Text == "")
{
MessageBox.Show("请输入要添加的数据");
}
else
{
listBox1.Items.Add(textBox1.Text);
textBox1.Text = "";
}
}
private void button2_Click(object sender, EventArgs e)
{
if (listBox1.SelectedItems.Count == 0)
{
MessageBox.Show("请选择要删除的项目");
}
else
{
listBox1.Items.Remove(listBox1.SelectedItem);
}
}
2、创建总显示滚动条的ListBox控件
HorizontalScrollbar和ScrollAlwaysVisible属性用于设置是否始终显示滚动条。HorizontalScrollbars属性为true,始终显示水平滚动条;ScrollAlwaysVisible属性为true,始终显示垂直滚动条。
例:在列表中显示滚动条
创建一个Windows窗体应用程序,向窗体中添加一个ListBox控件、一个TextBox控件和一个Button控件,将LIstBox控件的HorizontalScrollba和ScrollAlwaysVisible属性都设置为true,使其能显示水平和垂直方向的滚动条,代码如下
private void button1_Click(object sender, EventArgs e)
{
if (textBox1.Text == "")
{
MessageBox.Show("请输入要添加的数据");
}
else
{
listBox1.Items.Add(textBox1.Text);
textBox1.Text = "";
}
}
private void button2_Click(object sender, EventArgs e)
{
if (listBox1.SelectedItems.Count == 0)
{
MessageBox.Show("请选择要删除的项目");
}
else
{
listBox1.Items.Remove(listBox1.SelectedItem);
}
}
private void Form1_Load(object sender, EventArgs e)
{
listBox1.HorizontalScrollbar= true;
listBox1.ScrollAlwaysVisible= true;
}
3、在ListBox控件中选择多项
SelectionMode属性用于设置在ListBox控件中能否选择多项以及如何选择多项。SelectionMode的属性值必须是下表的枚举值之一,默认为SelectionMode.One。
枚举成员 | 说明 |
MultiExtended | 可以选择多项,用户可以使用Shift键、Ctrl键和箭头键来进行选择 |
MultiSimple | 可以选择多项 |
None | 无法选择项 |
One | 只能选择一项 |
例:设置列表中选择多项
创建一个Windows窗体应用程序,设置SelectionMode属性值为MultiExtended,即用户在控件中可以选择多项,且可以使用Shift键、Ctrl键和箭头键进行选择,代码如下
private void Form1_Load(object sender, EventArgs e)
{
listBox1.SelectionMode = SelectionMode.MultiExtended;
}
private void button1_Click(object sender, EventArgs e)
{
if (textBox1.Text == "")
{
MessageBox.Show("请输入要添加的数据");
}
else
{
listBox1.Items.Add(textBox1.Text);
textBox1.Text = "";
}
}
private void button2_Click(object sender, EventArgs e)
{
label1.Text = "共选择了:" + listBox1.SelectedItems.Count.ToString() + "项";
}
六、练习
1、实现单选题 使用单选按钮代替如下问题中A、B、C、D 4个选项字母,并将如下题目显示在窗体中。
下面四句诗,哪一句是描写夏天的?
A、秋风i萧瑟天气凉,草木摇荡露为霜
B、白雪纷纷何所似,撒盐空中差可拟
C、接天莲叶无穷碧,映日荷花别样红
D、竹外桃花三两枝,春江水暖鸭先知
private void button1_Click(object sender, EventArgs e)
{
string str = "ridioButton1";
foreach (Control ctr1 in this.Controls)
{
if (ctr1.GetType().Name == "RadioButton")
{
RadioButton rbtn = (RadioButton)ctr1;
if (rbtn.Checked)
str = rbtn.Name;
}
}
switch (str)
{
case "radioButton1":
MessageBox.Show("您选择的答案为A,错误!!!");
break;
case "radioButton2":
MessageBox.Show("您选择的答案是B,错误!!!");
break;
case "radioButton3":
MessageBox.Show("您选择的答案是C,正确!!!");
break;
case "radioButton4":
MessageBox.Show("您选择的答案是D,错误!!!");
break;
}
}
**一、代码释义**
1. **`button1_Click`方法**
- 这是一个在Windows Forms应用程序中的按钮点击事件处理方法。当用户点击名为`button1`的按钮时,这个方法会被执行。
- 首先,定义了一个字符串`str`并初始化为`"radioButton1"`。这个变量将用于存储用户选择的`RadioButton`的名称。
- 然后,使用`foreach`循环遍历当前窗体(`this`)中的所有控件(`Controls`)。对于每个控件,通过`GetType().Name`获取其类型名称,如果类型名称是`"RadioButton"`,则将该控件转换为`RadioButton`类型(`rbtn`)。如果这个`RadioButton`被选中(`rbtn.Checked`),就将`str`的值更新为该`RadioButton`的名称。
- 最后,使用`switch`语句根据`str`的值显示不同的消息框。如果`str`的值为`"radioButton1"`,则显示选择答案为A且错误的消息;如果是`"radioButton2"`,显示选择答案为B且错误的消息;如果是`"radioButton3"`,显示选择答案为C且正确的消息;如果是`"radioButton4"`,显示选择答案为D且错误的消息。
**二、可能的改进点**
1. **错误处理**
- 目前没有对`Controls`集合中可能存在的非`RadioButton`类型的控件进行更严格的类型检查。如果在`Controls`中有其他类型的控件,并且在获取类型名称或转换为`RadioButton`时出现异常,程序可能会崩溃。可以添加一些错误处理代码,例如使用`try - catch`块来捕获可能出现的异常。
2. **代码结构优化**
- 如果有多个类似的`RadioButton`判断逻辑,这种代码可能会变得冗长。可以考虑将判断`RadioButton`是否被选中并返回选中的`RadioButton`名称的逻辑封装成一个方法,提高代码的可维护性。
2、设计一个带查询功能的ComboBox 实现从ComboBox控件中查询已存在的·项,自动完成控件内容的输入。当用户在ComboBox控件中输入一个字符时,ComboBox控件会自动列出最由可能与之匹配的选项。
private void Frm_Main_Load(object sender, EventArgs e)
{
cbox_Find.Items.Clear();//清空ComboBox集合
cbox_Find.Items.Add("C#编程词典");//向ComboBox集合添加元素
cbox_Find.Items.Add("C#项目开发实战入门");//向ComboBox集合添加元素
cbox_Find.Items.Add("零基础学C#");//向ComboBox集合添加元素
cbox_Find.Items.Add("C#精彩编程200例");//向ComboBox集合添加元素
cbox_Find.Items.Add("C#从入门到精通");//向ComboBox集合添加元素
}
private void btn_Begin_Click(object sender, EventArgs e)
{
cbox_Find.AutoCompleteMode = //设置自动完成的模式
AutoCompleteMode.SuggestAppend;
cbox_Find.AutoCompleteSource = //设置自动完成字符串的源
AutoCompleteSource.ListItems;
}