C#多选下拉菜单自定义控件

news/2024/10/4 13:20:02

C#在winform项目中 多选下拉菜单自定义控件 。

由 ComboBox 和 CheckedListBox 组合形成。

效果:

 

自定义控件代码

MultiComboBox.cs

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;namespace HL_MultiComboBox
{public partial class MultiComboBox : UserControl{public ComboBox ComboBox = new ComboBox();public CheckedListBox CheckedListBox { get; set; }  //为选项赋值的接口public List<string> SelectedItems1 { get; set; }  //传递已选择项目的接口public MultiComboBox(){InitializeComponent();this.VerticalScroll.Enabled = true;this.AutoSize = true;CheckedListBox=new CheckedListBox();CheckedListBox.CheckOnClick = true;CheckedListBox.Visible = false;ComboBox = new ComboBox();ComboBox.Width = 150;ComboBox.DrawMode = DrawMode.OwnerDrawFixed;ComboBox.IntegralHeight = false;ComboBox.DroppedDown = false;ComboBox.DropDownHeight = 1;ComboBox.DropDownStyle = ComboBoxStyle.DropDown;ComboBox.AutoCompleteSource = AutoCompleteSource.ListItems;CheckedListBox.MouseUp += MouseUp1;CheckedListBox.MouseLeave += MouseLeave1;ComboBox.MouseDown += MouseDown1;ComboBox.DropDown += MouseLeave2;this.Controls.Add(ComboBox);   //添加控件
        }//
        #region 订阅方法模块//
        private void MouseLeave1(object sender, EventArgs e)  //鼠标离开CheckedListBox,隐藏CheckedListBox
        {CheckedListBox.Hide();}private void MouseLeave2(object sender, EventArgs e)  //ComboBox下拉时,显示下拉框
        {// 显示下拉框CheckedListBox.Width = ComboBox.Width;CheckedListBox.Size = new Size(ComboBox.DropDownWidth, CheckedListBox.Items.Count * 18);CheckedListBox.Location = new Point(ComboBox.Left, ComboBox.Height);Controls.Add(CheckedListBox);CheckedListBox.Visible = true;}private void MouseUp1(object sender, EventArgs e)  //在CheckedListBox中选择后,在ComboBox中显示相应项目
        {var list = new List<string>();foreach (var v in CheckedListBox.CheckedItems)  //将选择的项目加入list
            {list.Add(v.ToString());}ComboBox.Text = String.Join(",", list);SelectedItems1 = list;  //把选项赋给传递接口
        }private void MouseDown1(object sender, EventArgs e) //在ComboBox的下拉三角按下鼠标时,不显示ComboBox的下拉框,显示CheckedListBox当作其下拉框
        {ComboBox.DroppedDown = false;}#endregion }
}

MultiComboBox.Designer.cs

       #region 组件设计器生成的代码/// <summary>/// 设计器支持所需的方法 - 不要/// 使用代码编辑器修改此方法的内容。/// </summary>private void InitializeComponent(){this.SuspendLayout();// // MultiComboBox// this.Name = "MultiComboBox";this.Size = new System.Drawing.Size(278, 50);this.ResumeLayout(false);}#endregion

使用方法

拖 multComboBox 控件至窗体中 名为 multiComboBox1

       private void Form1_Load(object sender, EventArgs e){this.multiComboBox1.ComboBox.Width = 300;//为下拉菜单添加选项this.multiComboBox1.CheckedListBox.Items.Add("1");this.multiComboBox1.CheckedListBox.Items.Add("2");this.multiComboBox1.CheckedListBox.Items.Add("3");this.multiComboBox1.CheckedListBox.Items.Add("4");this.multiComboBox1.CheckedListBox.Items.Add("5");this.multiComboBox1.CheckedListBox.Items.Add("6");this.multiComboBox1.CheckedListBox.Items.Add("7");this.multiComboBox1.CheckedListBox.Items.Add("8");this.multiComboBox1.CheckedListBox.Items.Add("9");this.multiComboBox1.CheckedListBox.Items.Add("10");}private void button1_Click(object sender, EventArgs e){var strSelected = multiComboBox1.SelectedItems1;string strResult = string.Join(",", strSelected);MessageBox.Show(strResult);}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/28945.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

java.lang.NoSuchMethodError的不明崩溃问题

1)java.lang.NoSuchMethodError的不明崩溃问题2)微信小游戏有可行的分析Mono内存的方法吗3)游戏运行中,从对象池里拿Item时动态设置物体锚点,导致DC成倍增加4)Scriptable Build Pipeline打包Scritptable Object报错这是第384篇UWA技术知识分享的推送,精选了UWA社区的热门…

Cannot resolve method and(java.util.function.Predicatejava.lang.String)

springboot整合knife4j报错,提示找不到该方法,用的knife4j依赖是最新版本解决方法:将knife4j版本进行降级处理,这里采用2.0.4

单体到微服务架构的涅槃重生之路?

在技术演进的历史长河中,单体架构曾是众多项目的起点,但随着业务需求日益复杂,微服务架构凭借其灵活性和可扩展性逐渐成为新宠。行业内对此有着激烈的讨论,尤其是互联网大厂和行业技术大佬们对微服务架构的看法颇具影响力。在技术演进的历史长河中,单体架构曾是众多项目的…

Django Admin后台管理:高效开发与实践

title: Django Admin后台管理:高效开发与实践 date: 2024/5/8 14:24:15 updated: 2024/5/8 14:24:15 categories:后端开发tags:DjangoAdmin 模型管理 用户认证 数据优化 自定义扩展 实战案例 性能安全第1章:Django Admin基础 1.1 Django Admin简介 Django Admin是Django框架自…

redis自学(42)Lua语法

接下来要实现Nginx的本地缓存,而Nginx是用Lua语言来开发,下面简单理解一下Lua初始Lua Lua是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放,其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。 安装,centOS自带Lua语言了,不需要安装…

Stable-Diffusion ControlNet插件 DWPose模型下载及使用

webui Version: v1.9.3 DWPose项目地址: https://huggingface.co/yzd-v/DWPose 国内镜像: https://gitee.com/hf-models/DWPose 先安装 git-lfs,下载git仓库大文件会用到 文档: https://help.gitee.com/enterprise/code-manage/code-hosting/large-file-manage/git-lfs 然后确保…

ISCC线上赛2023

ISCC线上赛2023 web web1双重base解码得到flag web3 F12控制台查看可找到loveStory.php Enc.php download.php,loveStory.php为反序列源码 boy::__destruct() -->girl()::__call()-->helper()::__isset()-->boy()::__toString()-->helper()::__get()-->love_st…

python教程6.4-excel处理模块

第三方开源模块安装 创建文件打开已有文件写数据选择表保存表遍历表 按行遍历按列遍历遍历指定行列遍历指定第几列数据删除表设置单元格样式字体对齐设置行高列宽