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,这些可视化编程的工具,掌握好控件的用法是第一步,C#的控件也不例外,尤其这些常用的控件。常见控件中较难的往往是这些与数据源打交道的,比如CombBox、ListBox、ListView、TreeView、DataGridView. 文章…...
STL的空间配置器(allocator)
简答: 在CSTL中,空间配置器便是用来实现内存空间(一般是内存,也可以是硬盘等空间)分配的工具,他与容器联系紧密,每一种容器的空间分配都是通过空间分配器alloctor实现的。 解析: 1.两种C类对象实例化方式的异同在c中&a…...
linux系统莫名其妙的环境变量问题
今天使用Ubuntu20.04系统,使用less命令查看日志,发现日志中的“中文”显示为乱码; 使用vim命令查看该日志文件也显示为乱码; 使用more命令查看该日志文件则显示正常。 首先查询系统的字符集编码,发现编码正常支持中…...
使用 Microsoft Dataverse 简化的连接快速入门
重复昨天本地部署dynamics实例将其所有的包删除之后,再次重新下载回来。运行填写跟之前登陆插件一样的信息点击login 然后查看控制台,出现这样就说明第一个小示例就完成了。查看你的dy365平台下的 “我的活动”就可以看到刚刚通过后台代码创建的东西了。…...
PLSQL Developer 安装指南
PLSQL Developer 是 Oracle 的客户端。 下面以64位破解版的PLSQL Developer为例,进行PLSQL Developer 安装讲解。 0. 下载 PLSQL Developer https://download.csdn.net/download/Shipley_Leo/87557938 1. 根据操作系统选择对应“plsqldev.exe”可执行文件ÿ…...
腾讯云企业网盘2.5版本全新发布啦!!!
腾讯云企业网盘又又又更新啦!本期重点打磨管理协同、企业安全守护能力,同时也不断强化自身产品体验,助力企业高效办公~那么,此次更新具体有什么安全可靠的新功能呢?今天就带大家一起解锁~01协同管理,提升工…...
Excel职业版本(4)
图表 图表基本结构 组成元素 图表的分类 柱状图 介绍:在竖直方向比较不同类型的数据 适用场景:用于二维数据集,对于不同类型的数据进行对比,也可用于同一类型的数据在不同的时间维度的数据对比,通过柱子的高度来反…...
3-2 SpringCloud快速开发入门:Ribbon 实现客户端负载均衡
接上一章节Ribbon 是什么,这里讲讲Ribbon 实现客户端负载均衡 Ribbon 实现客户端负载均衡 由于 Spring Cloud Ribbon 的封装, 我们在微服务架构中使用客户端负载均衡调用非常简单, 只需要如下两步: 1、启动多个服务提供者实例并…...
ChatGPT,乌合之众的疯狂
最近ChatGPT有多火爆就不用我说了。公司里,从CEO到技术人员,乃至于门口的保安、食堂的大婶,没有一个不会聊两句ChatGPT的。连我20年未见的小学同学、三线城市警官,都问我这东西能不能给领导写汇报材料。 用不了多久,家…...
代码随想录刷题-数组-长度最小的子数组
文章目录长度最小的子数组习题暴力解法滑动窗口长度最小的子数组 本节对应代码随想录中:代码随想录,讲解视频:拿下滑动窗口! | LeetCode 209 长度最小的子数组_哔哩哔哩_bilibili 习题 题目链接: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 文件 例子:在 api.js 使用 可以继续添加 创建配置文件 在根目录与 package.json 同级创建文件 .env.development、 .env.production、.env.dev 文件…...
js学习3(数组)
目录 结构图 数组操作 每日一练 结构图 数组操作 ## 数组中可以存储任何类型元素 ## 创建: 字面量([...])、创建对象(new Array(arr_len)) ## 遍历: 循环遍历、forEach(callback)、map(callback)、filter(callback)、every(callback)、some(callback)、…...
不用写代码也能开发,产品经理是怎么做到的?
产品经理再也不用求开发了……就在前几天,我做的小程序上线了! 从产品原型设计,前端开发后端开发,产品部署到运维,都是由我1个人完成的。 我是啥时候学会写代码的呢?不瞒你说,我一行代码都没写…...
Android源码分析 - Parcel 与 Parcelable
0. 相关分享 Android-全面理解Binder原理 Android特别的数据结构(二)ArrayMap源码解析 1. 序列化 - Parcelable和Serializable的关系 如果我们需要传递一个Java对象,通常需要对其进行序列化,通过内核进行数据转发,…...
数字孪生与 UWB 技术创新融合:从单点测量到全局智能化
人员定位是指利用各种定位技术对人员在特定场所的位置进行准确定位的技术。人员定位技术主要应用于需要实时监控、管理和保障人员安全的场所,如大型厂区、仓库、医院、学校、商场等。人员定位技术的应用范围非常广泛,例如:-在工厂生产线上&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
前缀和(Monday) AcWing 3956. 截断数组(每日一题) 思路: 首先可以预处理出前缀和。判断数组长度如果小于 333 或者前 nnn 项不是 333 的倍数,则可以直接输出 000。 否则就枚举所有 s[i]s[n]3s[i] \cfrac…...
25k的Java开发常问的ThreadLocal问题有哪些?
前言:ThreadLocal问的比较多的是和Synchronized的区别、ThreadLocal被设计弱引用、存储元素的过程、实现线程隔离的原理。 文章目录 ThreadLocalThreadLocal定义ThreadLocal与Synchronized的区别ThreadLocal底层实现ThreadLocalMap存储元素的过程ThreadLocal实现线程隔离的原理…...
R语言基础(四):数据类型
R语言基础(一):注释、变量 R语言基础(二):常用函数 R语言基础(三):运算 5.数据类型 5.1 基本数据类型 R语言基本数据类型大致有六种: 整数Integer、浮点数Numeric、文本(字符串)Character、逻辑(布尔)Logical、复合类型Complex、…...
批处理命令--总结备忘「建议收藏」
批处理命令--总结备忘「建议收藏」 前言1、基础语法:2、批处理基本命令3、实例3.1 打开虚拟目录3.2 以当前时间为文件名,建文件夹3.3 备份postgresql数据库前言 最近用批处理命令做了一些postgresql数据库的备份,打开虚拟环境。。。发现批处理处理一些常用重复工作时真的很…...
面试知识点梳理及相关面试题(十一)-- docker
1. Docker和虚拟机的区别 容器不需要捆绑一整套操作系统,它只需要满足软件运行的最小内核就行了。 传统虚拟机技术是虚拟出一整套硬件后,在其上运行一个完成操作系统,在该系统上再运行所需应用进程容器内的应用进程直接运行于宿主的内核&am…...
k8s--services(微服务)
文章目录一、k8s网络通信service和iptables的关系二、services1.简介2.默认3.IPVS模式的service4.clusterip5.headless6.从外部访问service的三种方式(1)nodeport(2)loadbalancer7.metallb一、k8s网络通信 k8s通过CNI接口接入其他…...
【Java开发】设计模式 01:单例模式
1 单例模式介绍单例模式(Singleton Pattern)是Java中最为基础的设计模式。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对…...
10、go工程化与标准库
目录一、用go mod管理工程二、包引入规则三、init调用链四、可见性五、标准库1 - 时间函数2 - 数学计算3 - I/O操作4 - 编码一、用go mod管理工程 初始化项目:go mod init $module_name,$module_name和目录名可以不一样。上述命令会生成go.mod文件 mod…...
【Selenium自动化测试】鼠标与键盘操作
在 WebDriver 中,与鼠标操作相关的方法都封装在ActionChains 类中,与键盘操作相关的方法都封装在Keys类中。下面介绍下这两个类中的常用方法。 鼠标操作 ActionChains类鼠标操作常用方法: context_click():右击double_click()&…...
自定义javax.validation校验枚举类
枚举类单一情况 package com.archermind.cloud.phone.dto.portal.external.validation.validator;import com.archermind.cloud.phone.dto.portal.external.validation.constraints.EnumValidation; import lombok.extern.slf4j.Slf4j;import javax.validation.ConstraintVali…...
[Java·算法·中等]LeetCode39. 组合总和
每天一题,防止痴呆题目示例分析思路1题解1分析思路2题解2👉️ 力扣原文 题目 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 ,并以列表形…...
【Linux】vi和vim编辑器
目录主题主题 三种常见模式: 正常模式 以vim 打开一个档案就直接进入一般模式了(这是默认的模式)。在这个模式中,你可以使用[上下左右]按键来移动光标,你可以使用『删除字符』或『删除整行』来处理档案内容,也可以使用「复制、…...
BIO,NIO,AIO
IO模型 用什么样的通道进行数据传输和接收,java支持3种io网络编程模式 BIO NIO AIO BIO 同步阻塞 一个客户端连接对应一个处理线程 BIO示例代码(客户端和服务端) package com.tuling.bio;import java.io.IOException; import java.net.So…...
网站营销单页怎么做/百度联盟
一、awk基本用法 下图展示的awk编程模型是理解awk的基础: 二、awk基本用法 调用awk有三种方法(与sed类似): 在Shell命令行输入命令调用awk,格式为: awk [-F 域分隔符] ‘awk程序段’ 输入文件 将awk程序段插入脚本文件…...
滑动门代码 wordpress/seo排名优化方式
最长回文 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Problem Description 给出一个只由小写英文字符a,b,c...y,z组成的字符串S,求S中最长回文串的长度. 回文就是正反读都是一样的字符串,如aba, abba等 Input 输入有多组case,不超过12…...
用境外服务器做网站/手机怎么在百度上发布信息
参考官网site: http://kafka.apache.org/documentation.html#basic_ops_cluster_expansion https://cwiki.apache.org/confluence/display/KAFKA/Replicationtools#Replicationtools-6.ReassignPartitionsTool 说明: 当我们对kafka集群扩容时,需要满足2点要求: 将指…...
m开头的手机网站怎么做/培训机构咨询
作为一名从事多年的软件开发者,我之前从未考虑要开通一个技术博客,始终认为自己的个人能力不足以分享,但是后来还是决定开通一个技术博客,将之前的学习笔记,进行一次整理。转载于:https://www.cnblogs.com/chengsh/p/8…...
国外效果图网站/怎么自己做网址
2019独角兽企业重金招聘Python工程师标准>>> Steimatzky书店广告:哪本书曾陪伴过你成长?能配得上这种形容的,必不是随手塞在包里、应急拿来垫桌角的角色,而是放在枕边,陪伴你度过多少日 夜的朋友。Steimatz…...
政府网站旅游栏目建设/网络营销的营销策略
最近,Eclipse(Eclipse-JEE3.5)运行十分缓慢(可能插件安装过多),因此,得到了个机会调优一下,以便提高工作效率下图是未经任何调整eclipse的gc情况(使用jvisualvm命令&…...