WinForm——ComboBox总结

简介: WinForm——ComboBox总结

常用属性

DropDownStyle属性

ComboBox 的DropDownStyle 属性 一共有三个值:DropDownList, DropDown, Simple。


字段


说明


DropDown


通过单击下箭头指定显示列表,并指定文本部分可编辑。 这表示用户可以输入新的值,而不仅限于选择列表中现有的值。 使用此设置时,Append 的 AutoCompleteMode 值的作用与 SuggestAppend 值相同。 这是默认样式。


DropDownList


通过单击下箭头指定显示列表,并指定文本部分不可编辑。 这表示用户不能输入新的值。 只能选择列表中已有的值。 只有在 AutoCompleteMode 为 Suggest 或 SuggestAppend 时才会显示列表。


Simple


指定列表始终可见,并指定文本部分可编辑。 这表示用户可以输入新的值,而不仅限于选择列表中现有的值。


SelectedIndex属性

表示获取或设置指定当前选定项的索引,如果未选定任何项则返回值为-1


常用方法

Select方法

该方法从ComboBox选取指定的项。语法格式public void Select(int start,int length);


start:表示文本框中当前选定文本的第一位字符的位置。。


length:表示要选择的字符数。


SelectAll方法

该方法用来选择ComboBox控件可编辑部分的所有文本。


常用事件

DropDown事件

当显示ComboBox的下拉部分时发生。


DropDownClosed事件

在ComboBox的下拉部分不可见时发生。


SelectedIndexChanged事件

在SelectedIndex属性更改后发生。


SelectedValueChanged事件

在SelectedValue属性改变时发生。


实用举例

验证SelectedIndexChanged、DropDown、DropDownClosed事件

tt.png

public partial class Form1 : Form


   {


       public Form1()


       {


           InitializeComponent();


       }



       private void Form1_Load(object sender, EventArgs e)


       {


           this.richTextBox1.ReadOnly = true;


           string[] arr = { "高尔夫球", "乒乓球", "羽毛球", "排球" };


           for (int i = 0; i < arr.Length; i++)


           {


               this.comboBox1.Items.Add(arr[i]);


           }


           this.comboBox1.SelectedIndex = 0;


       }


       private void comboBox1_DropDown(object sender, EventArgs e)


       {


           this.richTextBox1.BackColor = Color.BurlyWood;


           this.richTextBox1.ForeColor = Color.BlueViolet;


           this.richTextBox1.Text = "开启";


           this.richTextBox1.SelectionAlignment = HorizontalAlignment.Center;


       }


       private void comboBox1_DropDownClosed(object sender, EventArgs e)


       {


           this.richTextBox1.BackColor = Color.BurlyWood;


           this.richTextBox1.ForeColor = Color.BlueViolet;


           this.richTextBox1.Text = "关闭";


           this.richTextBox1.SelectionAlignment = HorizontalAlignment.Center;


       }


       private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)


       {


           MessageBox.Show("选项的索引:" + this.comboBox1.SelectedItem.ToString());


       }


}


绑定DataSet数据

//绑定DataSet数据源


private void BindcmbArea()


{


   if (bllArea==null)//实例化对象


{


   bllArea=BLL.MetaData.HotelArea.Instance();


}


DataSet ds=bllArea.GetDataSet();//用DataSet获取数据源


cmb.DataSource=ds.Table[0].defaultView;//指定数据源


cmb.DisplayMember=”AreaName”;//绑定Text的值,获取值用cmb.Text


cmb.ValueMember=”AreaID”;//绑定Value值


}


绑定数据源后,默认添加“全部”项。

if (bllArea==null)//实例化对象


{


   bllArea=BLL.MetaData.HotelArea.Instance();


}


DataSet ds=bllArea.GetDataSet();//用DataSet获取数据源


DataTable table=new DataTable();


DataColumn dc=new DataCoumn(“AreaID”,typeof(int));


table.Columns.Add(dc);


dc=new DataColumn(“AreaName”,typeof(string));


table.Columns.Add(dc);


DataRow row=table.NewRow();


row[0]=0;


row[1]=”全部”;


for(int i=0;i<ds.Tables[0].Rows.Count;i++)


{


   row=table.NewRow();


row[0]=ds.Tables[0].Rows[i][“AreaID”];


row[1]= ds.Tables[0].Rows[i][“AreaName”];


   table.Rows.Add(row);


}


cmb.DataSource=table;//指定数据源


cmb.DisplayMember=”AreaName”;//绑定Text的值,获取值用cmb.Text


cmb.ValueMember=”AreaID”;//绑定Value值


注:当两个ComboBox指定同一个对象的时候,一个ComboBox的值发生变化的时候,另一个ComboBox也改变的解决方法


cmb2.DataSurce=table.Copy();


cmb2.DisplayMember=”AreaName”;//绑定Text的值,获取值用cmb.Text


cmb2.ValueMember=”AreaID”;//绑定Value值


cmb2.SelectedIndex=0;


绑定List数据源增加“请选择”项

private void BindType()


{

        List<TicketTypeInfo> typeList=_TypeBLL.GetList();


        if (typeList>0)


{

        typeList.Insert(0,new TicketTypeInfo(){TypeID=0,TypeCode=”0”,TypeName=”请选择”});


        cmb.DataSource=typeList;


        cmb.DisplayMember=”TypeName”;


        cmb.ValueMember=”TypeCode”;


}


}


美化ComboBox,让ComboBox每个Item前面加上一个图片

将数据库中图片读取到imageList1中,用来保存图片。


设置ComboBox的属性。将DrawMode设置为OwnerDrawFixed,DropDownStyle设置为DropDownList


//绑定数据


private void cmbBind()


{

        List<DicValueInfo> dicValueList=_dicValueBLL.GetList();


        foreach(DicValueInfo dic in dicValueList)


        {

                  imageList1.Images.Add(dic.DicItemID.ToString(),AddHeader(dicValueInfo.Icon16));// AddHeader方法将byte数组转为图片。


                  cmb.Items.Add(dic.ShowName.ToString());


}


if (cmb.Items.Cout>0)


{

        cmb.SelectedIndex=0;


}


}


//绑定事件DrawItem


private void cmbDrawItem(object sender,DrawItemEventArgs e)


{

        Graphics gCom=e.Graphics;//声明一个GDT+绘图图面类的对象。


        Rectangle rCom=e.Bounds;//声明一个表示举行的位置和大小类的对象。


Size imageSize=imageList1.ImageSize;//声明一个有序证书对的对象。


FontDialog typeface=new FontDialog();//定义一个字体类的对象。


Font style=typeface.Font;//定义一个特定的文本格式类对象


if (e.Index>=0)//当绘制的索引项存在时。


{

        string temp=(string)cmb.Items[e.Index].ToString();//获取ComboBox控件索引项的文本内容。


        StringFormat stringFormat=new StringFormat();//定义一个封装文本布局信息类的对象。


        stringFormat.Alignment=StringAlignment.Near;//设定文本的布局方式。


        if(e.state==(DrawItemState.NoAccelerator|DrawItemState.NoFocusRect))//当绘制项没有键盘加速键和焦点可视化提示时


        {

                  e.Graphics.FillRectangle(new SolidBrush(Color.Red),rCom);//用指定的颜色填充自定义矩形的内部。


                  imageList1.Draw(e.Graphics,rCom.Left,rCom.Top,e.Index);//在指定位置绘制指定索引的图片


e.Graphics.DrawString(temp,new SolidBrush(Color.Black),rCom.Left+imageSize.Width,rCom.Top);//在指定的位置,指定的Font对象绘制指定的文本字符串。


e.DrawFocusRectangle();//在指定的边界范围内绘制聚集框


}


else//当绘制项有键盘加速键或者焦点可是化提示时


{

        e.Graphics.FillRectangle(new SolidBrush(Color.LightBule),rCom);//用指定的颜色填充自定义矩形难过的内部。


        imageList1.Draw(e.Graphics,rCom.Left,rCom.Top,e.Index);//指定位置索引的图片


        e.Graphics.DrawString(temp,style,new SolidBrush(Color.Black),rCom.Left+imageSize.Width,rCom.Top);//在指定位置并且用指定的Font对象绘制指定的文本字符串。


e.DrawFocusRectangle();//在指定的边界范围内绘制聚焦框。


}


}


}


目录
相关文章
|
C# 索引 Windows
Winform控件优化之TabControl控件的使用和常用功能
TabControl是一个分页切换(tab)控件,不同的页框内可以呈现不同的内容,将主要介绍调整tab的左右侧显示、设置多行tab、禁用或删除tabpage、隐藏TabControl头部的选项卡等
9090 0
Winform控件优化之TabControl控件的使用和常用功能
|
计算机视觉 Python
最快速度写出一个识别效果——OpenCV模板匹配(含代码)
最快速度写出一个识别效果——OpenCV模板匹配(含代码)
1665 0
|
人工智能 自然语言处理 IDE
模型微调不再被代码难住!PAI和Qwen3-Coder加速AI开发新体验
通义千问 AI 编程大模型 Qwen3-Coder 正式开源,阿里云人工智能平台 PAI 支持云上一键部署 Qwen3-Coder 模型,并可在交互式建模环境中使用 Qwen3-Coder 模型。
1571 109
|
9月前
|
编译器 数据库连接 API
深入理解C#密封类(sealed)——掌握C#密封类的使用场景与设计限制
在C#中,密封类(sealed class)通过`sealed`关键字防止被继承,用于提升安全性、性能与设计明确性。适用于工具类、不可变对象等场景,是面向对象设计的重要手段。
|
12月前
|
传感器 算法 定位技术
【GPS+INS在MAV导航上融合】基于间接卡尔曼滤波的IMU与GPS融合MATLAB仿真(IMU与GPS数据由仿真生成)
【GPS+INS在MAV导航上融合】基于间接卡尔曼滤波的IMU与GPS融合MATLAB仿真(IMU与GPS数据由仿真生成)
569 0
|
机器学习/深度学习 存储 人工智能
数据结构在实际开发中的广泛应用
【10月更文挑战第20天】数据结构是软件开发的基础,它们贯穿于各种应用场景中,为解决实际问题提供了有力的支持。不同的数据结构具有不同的特点和优势,开发者需要根据具体需求选择合适的数据结构,以实现高效、可靠的程序设计。
1053 63
|
机器学习/深度学习 文字识别 C#
C#使用PaddleOCR进行图片文字识别✨
C#使用PaddleOCR进行图片文字识别✨
1840 0
|
数据采集 存储 人工智能
AI 模型:数据收集和清洗
AI 模型:数据收集和清洗
2081 2
|
安全 API C#
C# 如何让程序后台进程不被Windows任务管理器强制结束
C# 如何让程序后台进程不被Windows任务管理器强制结束
1068 0