WinForm——ComboBox总结

举报
AI浩 发表于 2021/12/22 23:52:56 2021/12/22
【摘要】 常用属性 DropDownStyle属性 ComboBox 的DropDownStyle 属性 一共有三个值:DropDownList, DropDown, Simple。 字段 说明 DropDown 通过单击下箭头指定显示列表,并指定文本部分可编辑。 这表示用户可以输入新的值,而不仅限于选择列表中现有的值。 使用此设置时,...
  1. 常用属性
  • DropDownStyle属性

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

字段

说明

DropDown

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

DropDownList

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

Simple

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

  • SelectedIndex属性

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

  1. 常用方法
  • Select方法

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

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

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

  • SelectAll方法

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

  1. 常用事件
  • DropDown事件

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

  • DropDownClosed事件

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

  • SelectedIndexChanged事件

在SelectedIndex属性更改后发生。

  • SelectedValueChanged事件

在SelectedValue属性改变时发生。

  1. 实用举例
  • 验证SelectedIndexChanged、DropDown、DropDownClosed事件

 

 

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();//在指定的边界范围内绘制聚焦框。

}

}

}

文章来源: wanghao.blog.csdn.net,作者:AI浩,版权归原作者所有,如需转载,请联系作者。

原文链接:wanghao.blog.csdn.net/article/details/105641386

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。