当前位置: 首页 > news >正文

C#完全掌握控件之-combbox

无论是QT还是VC,这些可视化编程的工具,掌握好控件的用法是第一步,C#的控件也不例外,尤其这些常用的控件。常见控件中较难的往往是这些与数据源打交道的,比如CombBox、ListBox、ListView、TreeView、DataGridView.

文章目录

  • 一、添加数据
    • 1、常规添加
      • (1)字符串添加
      • (2)利用数组添加
      • (3)利用类添加
    • 2、指定数据源添加
      • (1)List结合自定义类做数据源
      • (2)利用字典做数据源
      • (3)利用DataTable做数据源
    • 3、添加多个数据源
  • 二、获取数据
    • 1、SelectedIndex
    • 2、SelectedValue
    • 3、SelectedItem
    • 4、显示默认值
  • 三、调整样式
    • 1、对齐方式
    • 2、文字颜色
    • 3、背景颜色
    • 3、尺寸高宽的设置
    • 3、禁止选择(目前无法办到,只能变通实现)
    • 4、显示背景图
  • 四、自定义自己的combbox
    • 1、多选下拉框
    • 2、多列下拉框

文章出处: https://haigear.blog.csdn.net/article/details/128770359
这篇博文我们来详细了解一下Combbox的用法,毕竟只要你做项目,这个控件就比不可少。

一、添加数据

1、常规添加

(1)字符串添加

对于初学者,所了解的,所以为的,所常用的恐怕就是为combbox添加字符串的items,形如下面这种。简单,但粗暴机械而低效,但更容易有成就感,一试就成。

ComboBox comboxcell=new ComboBox();comboxcell.Items.Add("气");comboxcell.Items.Add("血");comboxcell.Items.Add("筋");comboxcell.Items.Add("骨");comboxcell.Items.Add("阴");comboxcell.Items.Add("阳");comboxcell.Items.Add("痰");comboxcell.Items.Add("湿");

(2)利用数组添加

一个个添加,有点效率低下,来一个字符串数组,老老实实传一个数组进去

comboxcell.Items.AddRange(new string[]{"虚", "实","表","里", "寒","热"});

如果是在DataGridView中的DataGridViewComboBoxCell,还可以更简单,因为DataGridViewComboBoxCell的AddRange有两个重载,其中一个采用了params object[]的参数的重载,也就是说可以可变数量的参数。

 DataGridViewComboBoxCell comboxcell = new DataGridViewComboBoxCell();comboxcell.Items.AddRange("虚", "实", "表", "里", "寒", "热");

他们两种combbox的addrange实现不同,这是微软的为题,没有做统一,希望它在下一个版本也给Combbox的addrange增加一个params object[]重载。

(3)利用类添加

上面的添加都一个缺点,那就是只是添加了显示值,当我们需要键值对应的时候就不能满足需求。我们设计一个简单的类,只包含键和值即可:

 public class Creature{public int cid { get; set; }public string cname { get; set; }} 

显示的是文字,背后是值与显示文字对应,选择一个文字对应一个值

ComboBox comboxcell=new ComboBox();
comboxcell1.Items.Add(new Creature { cid = 2, cname = "dog" });
comboxcell1.Items.Add(new Creature { cid = 3, cname = "cat" });
comboxcell1.Items.Add(new Creature { cid = 4, cname = "bird" });
comboxcell1.Items.Add(new Creature { cid = 5, cname = "human" });
comboxcell1.ValueMember = "cid";
comboxcell1.DisplayMember="cname";

这里必须注意,一定要设置ValueMember 和DisplayMember,否则我们点击下拉框得到的就是这般模样:
在这里插入图片描述
特别注意:
像上面这样,comboBox.Add(自定义对象非IList类)给comboBox添加item后,再分别制定其DisplayMember和ValueMember,使用SelectedValue得不到cid,得到null是,如果想得到cid,必须强制转换comboBox. SelectedItem 为自定义类后才可以取得cid。
SelectedValue只对通过combBox.DataSource来指定的combBox的数据源(IList<自定义对象类型>或者DataTable)有效,也就是说这个时候 SelectedValue才有值!

如果我们要用到类,又要用SelectedValue和SelectedText属性得到你想要的属性值,那我们就只有一条路,第一就是让你的类去继承IList接口。
其实你也可以不去实现IList接口,接续看下面的章节,自由答案。
“欲练此功,挥刀自宫,其实也不必自宫”!

2、指定数据源添加

其实数据源可以是任何实现了IList接口的类,如List、Dictionary甚至DataTable;

(1)List结合自定义类做数据源

我们知道,List是实现了IList接口的,所以我们可以用来作为数据源,而且他还可以让我们自定义的类通过List轻松实现IList接口的效果,看看下面的代码:

    List<Creature> list = new List<Creature>();list.Add(new Creature { cid = 22, cname = "dog" });list.Add(new Creature { cid = 24, cname = "bird" });list.Add(new Creature { cid = 105, cname = "human" });comboxcell1.DataSource=new BindingSource { DataSource = list };comboxcell1.ValueMember = "cid";comboxcell1.DisplayMember = "cname";

(2)利用字典做数据源

字典类相比自定义类结合List更简练,只有键值对,没有也不需要多余的信息。

   Dictionary<int,string> list1 = new Dictionary<int,string>();list1.Add(213, "dog");list1.Add(523, "cat");comboxcell1.DataSource=new BindingSource { DataSource = list1 };comboxcell1.ValueMember = "Key";comboxcell1.DisplayMember = "Value";

(3)利用DataTable做数据源

DataTable也可以作为combbox的数据源,但个人感觉还是有些杀鸡用牛刀了。反正只能用上两个列,一列做值一列做键而已。

 DataTable dt = new DataTable();dt.Columns.Add("id", typeof(System.Int32));dt.Columns.Add("name", typeof(System.String));dt.Columns.Add("col3", typeof(System.String));dt.Columns.Add("col4", typeof(System.String));dt.Columns.Add("col5", typeof(System.String));dt.Columns.Add("col6", typeof(System.String));for (int i = 0; i < 10; i++){dt.Rows.Add(dt.NewRow());dt.Rows[i][0] = i + 123;for (int j = 1; j < 6; j++)dt.Rows[i][j] = "item" + j.ToString() + i.ToString();}comboxcell1.DataSource = dt;comboxcell1.ValueMember = "id";comboxcell1.DisplayMember = "name";

很显然,这里我们除了第一列和第二列用到了,其余的都“浪费了”,当然,我们可以通过SelectedItem获取其余的信息,这在一些复杂的应用中还是很有好处的。

3、添加多个数据源

http://soft.zhiding.cn/software_zone/2008/0718/995129.shtml

二、获取数据

1、SelectedIndex

2、SelectedValue

3、SelectedItem

需要注意:
SelectedItem在webform中有两个属性SelectedItem.Value和SelectedItem.Text但在winform中是没有的,如果想获得这两个属性,只能通过强制转换SelectedItem为对应的对象类后通过类属性得到。

4、显示默认值

设定显示默认值(不是系统默认的第一项),而是根据显示的文字或者值;

comboBox1.SelectedIndex = comboBox1.Items.IndexOf("默认值");

三、调整样式

https://blog.csdn.net/weixin_44777515/article/details/88893090
可以在属性栏中设置的属性我这里不赘述,重点讲需要通过代码实现的。

1、对齐方式

2、文字颜色

对特殊的项目更换颜色,起到提示作用,也是我们常常有的需求。比如,itemValue小于某个值的时候显示红色或者灰色。
在这里插入图片描述

3、背景颜色

在这里插入图片描述

3、尺寸高宽的设置

在这里插入图片描述

3、禁止选择(目前无法办到,只能变通实现)

目前想到的方法就是在itemdraw中强制不让他绘制出来,改绘制为其他文字;比如禁止选择

4、显示背景图

四、自定义自己的combbox

自己定义combobox的好处就是能够根据自己的需求来设计,坏处就是要多写几行代码,多实现几个基类的方法和属性。下面我们建立一个自定义控件(用户组件),名称定义为ExComboBox
在这里插入图片描述

1、多选下拉框

2、多列下拉框

还在更新之中,请继续关注!
转载请注明出处,码字不易:https://haigear.blog.csdn.net/article/details/128770359

https://blog.csdn.net/weixin_44777515/article/details/88893090

相关文章:

C#完全掌握控件之-combbox

无论是QT还是VC&#xff0c;这些可视化编程的工具&#xff0c;掌握好控件的用法是第一步&#xff0c;C#的控件也不例外&#xff0c;尤其这些常用的控件。常见控件中较难的往往是这些与数据源打交道的&#xff0c;比如CombBox、ListBox、ListView、TreeView、DataGridView. 文章…...

STL的空间配置器(allocator)

简答&#xff1a; 在CSTL中&#xff0c;空间配置器便是用来实现内存空间(一般是内存&#xff0c;也可以是硬盘等空间)分配的工具&#xff0c;他与容器联系紧密&#xff0c;每一种容器的空间分配都是通过空间分配器alloctor实现的。 解析: 1.两种C类对象实例化方式的异同在c中&a…...

linux系统莫名其妙的环境变量问题

今天使用Ubuntu20.04系统&#xff0c;使用less命令查看日志&#xff0c;发现日志中的“中文”显示为乱码&#xff1b; 使用vim命令查看该日志文件也显示为乱码&#xff1b; 使用more命令查看该日志文件则显示正常。 首先查询系统的字符集编码&#xff0c;发现编码正常支持中…...

使用 Microsoft Dataverse 简化的连接快速入门

重复昨天本地部署dynamics实例将其所有的包删除之后&#xff0c;再次重新下载回来。运行填写跟之前登陆插件一样的信息点击login 然后查看控制台&#xff0c;出现这样就说明第一个小示例就完成了。查看你的dy365平台下的 “我的活动”就可以看到刚刚通过后台代码创建的东西了。…...

PLSQL Developer 安装指南

PLSQL Developer 是 Oracle 的客户端。 下面以64位破解版的PLSQL Developer为例&#xff0c;进行PLSQL Developer 安装讲解。 0. 下载 PLSQL Developer https://download.csdn.net/download/Shipley_Leo/87557938 1. 根据操作系统选择对应“plsqldev.exe”可执行文件&#xff…...

腾讯云企业网盘2.5版本全新发布啦!!!

腾讯云企业网盘又又又更新啦&#xff01;本期重点打磨管理协同、企业安全守护能力&#xff0c;同时也不断强化自身产品体验&#xff0c;助力企业高效办公~那么&#xff0c;此次更新具体有什么安全可靠的新功能呢&#xff1f;今天就带大家一起解锁~01协同管理&#xff0c;提升工…...

Excel职业版本(4)

图表 图表基本结构 组成元素 图表的分类 柱状图 介绍&#xff1a;在竖直方向比较不同类型的数据 适用场景&#xff1a;用于二维数据集&#xff0c;对于不同类型的数据进行对比&#xff0c;也可用于同一类型的数据在不同的时间维度的数据对比&#xff0c;通过柱子的高度来反…...

3-2 SpringCloud快速开发入门:Ribbon 实现客户端负载均衡

接上一章节Ribbon 是什么&#xff0c;这里讲讲Ribbon 实现客户端负载均衡 Ribbon 实现客户端负载均衡 由于 Spring Cloud Ribbon 的封装&#xff0c; 我们在微服务架构中使用客户端负载均衡调用非常简单&#xff0c; 只需要如下两步&#xff1a; 1、启动多个服务提供者实例并…...

ChatGPT,乌合之众的疯狂

最近ChatGPT有多火爆就不用我说了。公司里&#xff0c;从CEO到技术人员&#xff0c;乃至于门口的保安、食堂的大婶&#xff0c;没有一个不会聊两句ChatGPT的。连我20年未见的小学同学、三线城市警官&#xff0c;都问我这东西能不能给领导写汇报材料。 用不了多久&#xff0c;家…...

代码随想录刷题-数组-长度最小的子数组

文章目录长度最小的子数组习题暴力解法滑动窗口长度最小的子数组 本节对应代码随想录中&#xff1a;代码随想录&#xff0c;讲解视频&#xff1a;拿下滑动窗口&#xff01; | LeetCode 209 长度最小的子数组_哔哩哔哩_bilibili 习题 题目链接&#xff1a;209. 长度最小的子数…...

成功解决安装MySQL5.7提示公钥GPG密钥配置为file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql

前言 大家好,我是沐风晓月,今天做MySQL5.7安装的时候遇到问题了,我们一起来复盘下这个问题,如果你使用我的方法没有解决,一定要留言给我,我们一起来排查和学习和完善。 本文收录于csdn 我是沐风晓月的专栏 【日常遇到的疑难问题和bug解决】 ,若点击无法跳转,请在csdn …...

vue配置环境变量

目录 创建配置文件 .env.development 文件 .env.production 文件 .env.dev 文件 使用变量 配置 package.json 文件 例子&#xff1a;在 api.js 使用 可以继续添加 创建配置文件 在根目录与 package.json 同级创建文件 .env.development、 .env.production、.env.dev 文件…...

js学习3(数组)

目录 结构图 数组操作 每日一练 结构图 数组操作 ## 数组中可以存储任何类型元素 ## 创建&#xff1a; 字面量([...])、创建对象(new Array(arr_len)) ## 遍历&#xff1a; 循环遍历、forEach(callback)、map(callback)、filter(callback)、every(callback)、some(callback)、…...

不用写代码也能开发,产品经理是怎么做到的?

产品经理再也不用求开发了……就在前几天&#xff0c;我做的小程序上线了&#xff01; 从产品原型设计&#xff0c;前端开发后端开发&#xff0c;产品部署到运维&#xff0c;都是由我1个人完成的。 我是啥时候学会写代码的呢&#xff1f;不瞒你说&#xff0c;我一行代码都没写…...

Android源码分析 - Parcel 与 Parcelable

0. 相关分享 Android-全面理解Binder原理 Android特别的数据结构&#xff08;二&#xff09;ArrayMap源码解析 1. 序列化 - Parcelable和Serializable的关系 如果我们需要传递一个Java对象&#xff0c;通常需要对其进行序列化&#xff0c;通过内核进行数据转发&#xff0c;…...

数字孪生与 UWB 技术创新融合:从单点测量到全局智能化

人员定位是指利用各种定位技术对人员在特定场所的位置进行准确定位的技术。人员定位技术主要应用于需要实时监控、管理和保障人员安全的场所&#xff0c;如大型厂区、仓库、医院、学校、商场等。人员定位技术的应用范围非常广泛&#xff0c;例如&#xff1a;-在工厂生产线上&am…...

蓝桥杯嵌入式PWM_IN(打开中断)

1.原理图 2.配置 3.代码 关键函数 HAL_TIM_IC_Start_IT(&htim3,TIM_CHANNEL_1) HAL_TIM_IC_CaptureCallback(TIM_HandTypeDef *htim)//回调函数 HAL_TIM_GET_COUNTER(&htim3) __HAL_TIM_SetCounter(&htim3,0)void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef …...

蓝桥杯集训·每日一题Week1

前缀和&#xff08;Monday&#xff09; AcWing 3956. 截断数组&#xff08;每日一题&#xff09; 思路&#xff1a; 首先可以预处理出前缀和。判断数组长度如果小于 333 或者前 nnn 项不是 333 的倍数&#xff0c;则可以直接输出 000。 否则就枚举所有 s[i]s[n]3s[i] \cfrac…...

25k的Java开发常问的ThreadLocal问题有哪些?

前言:ThreadLocal问的比较多的是和Synchronized的区别、ThreadLocal被设计弱引用、存储元素的过程、实现线程隔离的原理。 文章目录 ThreadLocalThreadLocal定义ThreadLocal与Synchronized的区别ThreadLocal底层实现ThreadLocalMap存储元素的过程ThreadLocal实现线程隔离的原理…...

R语言基础(四):数据类型

R语言基础(一)&#xff1a;注释、变量 R语言基础(二)&#xff1a;常用函数 R语言基础(三)&#xff1a;运算 5.数据类型 5.1 基本数据类型 R语言基本数据类型大致有六种&#xff1a; 整数Integer、浮点数Numeric、文本(字符串)Character、逻辑(布尔)Logical、复合类型Complex、…...

Chapter03-Authentication vulnerabilities

文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...

Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具

文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...

基于数字孪生的水厂可视化平台建设:架构与实践

分享大纲&#xff1a; 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年&#xff0c;数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段&#xff0c;基于数字孪生的水厂可视化平台的…...

React19源码系列之 事件插件系统

事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...

跨链模式:多链互操作架构与性能扩展方案

跨链模式&#xff1a;多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈&#xff1a;模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展&#xff08;H2Cross架构&#xff09;&#xff1a; 适配层&#xf…...

EtherNet/IP转DeviceNet协议网关详解

一&#xff0c;设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络&#xff0c;本网关连接到EtherNet/IP总线中做为从站使用&#xff0c;连接到DeviceNet总线中做为从站使用。 在自动…...

重启Eureka集群中的节点,对已经注册的服务有什么影响

先看答案&#xff0c;如果正确地操作&#xff0c;重启Eureka集群中的节点&#xff0c;对已经注册的服务影响非常小&#xff0c;甚至可以做到无感知。 但如果操作不当&#xff0c;可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...

【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)

本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...

C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)

名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...

MySQL 8.0 事务全面讲解

以下是一个结合两次回答的 MySQL 8.0 事务全面讲解&#xff0c;涵盖了事务的核心概念、操作示例、失败回滚、隔离级别、事务性 DDL 和 XA 事务等内容&#xff0c;并修正了查看隔离级别的命令。 MySQL 8.0 事务全面讲解 一、事务的核心概念&#xff08;ACID&#xff09; 事务是…...