当前位置: 首页 > 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、…...

RAG开发

LangChain通用提示词模板&#xff1a;from langchain_core.prompts import PromptTemplate from langchain_community.llms import Tongyiprompt_template PromptTemplate.from_template("我的邻居姓{lastname},刚生了{gender}" )prompt_template.format(lastname …...

知识向量化实战指南:从模型选型到混合检索优化

1. 知识向量化的核心价值与应用场景 第一次接触知识向量化这个概念时&#xff0c;我也是一头雾水。直到在医疗知识库项目中亲眼看到"糖尿病治疗"和"血糖控制方案"这两个看似不同的查询&#xff0c;通过向量化后获得了0.92的相似度评分&#xff0c;才真正理…...

RK3568 NPU RKNN(五):RKNN-ToolKit2性能与内存评估实战解析

1. 环境准备与工具链搭建 在开始RKNN-ToolKit2的性能与内存评估之前&#xff0c;我们需要先搭建完整的开发环境。这里以野火LubanCat开发板为例&#xff0c;具体硬件配置为RK3568芯片4GB内存版本。开发主机建议使用Ubuntu 20.04系统&#xff0c;确保Python版本在3.6-3.8之间。 …...

FanControl完全掌控:5大核心优势实现电脑风扇智能调节

FanControl完全掌控&#xff1a;5大核心优势实现电脑风扇智能调节 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trending/fa…...

Linux驱动开发实战:从设备树到内核调试全解析

Linux驱动工程师实战经验分享&#xff1a;从入门到进阶的技术要点解析1. 设备树系统的深入理解1.1 设备树的基本概念在Linux驱动开发初期&#xff0c;大多数工程师都是从最简单的模块开发开始。典型的入门流程包括&#xff1a;#include <linux/module.h> #include <li…...

编写程序让智能洗手液机检测手部靠近,自动出液,无需按压。

&#x1f9fc; 项目实战&#xff1a;基于红外测距的智能洗手液机控制系统一、实际应用场景描述 (Scenario)在机场、医院、办公楼等公共场所&#xff0c;传统的按压式洗手液机存在卫生隐患——每个人都需要接触同一个泵头&#xff0c;容易造成细菌交叉感染。目标&#xff1a;通过…...

这次终于选对了!降AI率软件深度测评与推荐

2026年真正好用的AI论文降重与改写工具&#xff0c;核心看降重效果、去AI味、格式保留、学术适配四大指标。综合实测&#xff0c;千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队&#xff0c;覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 …...

Vue项目中使用/deep/报错?手把手教你用::v-deep完美解决样式问题

Vue样式穿透难题&#xff1a;从/deep/到::v-deep的优雅升级指南 在Vue生态中&#xff0c;样式作用域管理一直是开发者们津津乐道的话题。当你在使用第三方UI库时&#xff0c;是否遇到过这样的尴尬&#xff1a;明明在本地开发环境调试好的样式&#xff0c;打包后却神秘失效&…...

taocms v3.0.2漏洞防御指南:如何避免.htaccess文件被恶意利用

Taocms v3.0.2安全加固实战&#xff1a;从漏洞原理到防御体系构建 当网站管理后台的.htaccess文件成为攻击者的跳板时&#xff0c;系统安全便形同虚设。近期曝光的Taocms v3.0.2远程代码执行漏洞&#xff08;CVE-2022-25578&#xff09;正是利用了这一薄弱环节&#xff0c;攻击…...

如何快速实现Blade框架国际化:多语言和本地化的完整指南

如何快速实现Blade框架国际化&#xff1a;多语言和本地化的完整指南 【免费下载链接】blade :rocket: Lightning fast and elegant mvc framework for Java8 项目地址: https://gitcode.com/gh_mirrors/bl/blade Blade是一款基于Java8的轻量级MVC框架&#xff0c;以其闪…...