Winform ListView 嵌入组合框、布尔、图片等复杂控件

一、Winform ListView 显示复杂控件示例

  • 以下展示了两种实现思路方案。
  • 最后修改日期 2024-05 surfsky

1.1 方案一:ListView 结合组合框进行模拟编辑

基本思路

  • 在界面上放置一个lisview和一个combobox,combobox平时是隐藏的。
  • 点击listview,在点击位置的单元格上显示这个combobox
  • combobbox数据变更后,更新到listview

核心代码如:

    public partial class Form1 : Form{ListViewSubItem _cell;  // 被选中的单元格public Form1(){InitializeComponent();InitData();}void InitData(){// combobox comboBox1.Visible = false;this.comboBox1.Items.Add("科比");this.comboBox1.Items.Add("姚明");this.comboBox1.Items.Add("杜兰特");this.comboBox1.Items.Add("邓肯");// listviewlistView1.Columns.Add("第一列");listView1.Columns.Add("第二列");listView1.Columns.Add("第三列");var item = new ListViewItem(1.ToString());item.SubItems.Add("姚明");item.SubItems.Add("科比");listView1.Items.Add(item);item = new ListViewItem(2.ToString());item.SubItems.Add("邓肯");item.SubItems.Add("杜兰特");listView1.Items.Add(item);}// ListView 点击后在点击单位格位置处显示控件private void lv_MouseUp(object sender, MouseEventArgs e){// 将控件定位到点击单元格中var lvi = this.listView1.GetItemAt(e.X, e.Y);if (lvi != null){_cell = lvi.GetSubItemAt(e.X, e.Y);var n = lvi.SubItems.IndexOf(_cell);if (_cell != null && n>0){var rect = _cell.Bounds;rect.Y += 5;this.comboBox1.Visible = true;this.comboBox1.Bounds = rect;this.comboBox1.Text = _cell.Text;this.comboBox1.BringToFront();//this.comboBox1.Focus();return;}}this.comboBox1.Visible = false;}// 组合框数据变更后,将数据更新到单元格private void comboBox1_SelectedIndexChanged(object sender, EventArgs e){if (_cell != null){_cell.Text = comboBox1.Text;}}}

效果如:
在这里插入图片描述

1.2 方案二:自定义 ListView 和各种列

功能

  • 嵌入下拉框列
  • 嵌入色彩列
  • 嵌入数字编辑列
  • 嵌入布尔值列
  • 嵌入图片列
  • 点击标题列排序
  • 行选择

使用代码

    public partial class Form2 : Form{public Form2(){InitializeComponent();InitListView();}public void InitListView(){this.lv.Columns.Add(new BaseColumnHeader("序号", 50));this.lv.Columns.Add(new BaseColumnHeader("可见", 50));this.lv.Columns.Add(new BaseColumnHeader("颜色", 60));this.lv.Columns.Add(new BaseColumnHeader("数值", 150));this.lv.Columns.Add(new BoolColumnHeader("布尔值", Resources.BulletTick, Resources.BulletCross, 100));this.lv.Columns.Add(new BaseColumnHeader("图片", 200));var r = new Random();for (int i = 0; i < 10; i++){lv.BeginUpdate();var b = r.Next(100) % 2 == 0 ? true : false;var item = new ListViewItemBase(i.ToString());var visibleCell = new ListViewControlSubItem();var colorCell = new ListViewControlSubItem();var numCell = new ListViewControlSubItem();var boolCell = new ListViewBoolSubItem(b);var imageCell = new ListViewImageSubItem(Resources.Cart);// comboxvar cmbVisible = new ComboBox();cmbVisible.Items.Add("是");cmbVisible.Items.Add("否");cmbVisible.SelectedIndex = 0;//cmbVisible.Focus();// color labelvar label = new Label();label.BackColor = Color.Green;label.Text = "";label.BorderStyle = BorderStyle.FixedSingle;label.MouseClick += new MouseEventHandler(bt_MouseClick);// number boxvar num = new NumericUpDown();num.Margin = new Padding(0);num.Minimum = new decimal(-999999999.0);num.Maximum = new decimal(999999999.0);num.Value = new decimal(i * 10);num.DecimalPlaces = 2;// controlslv.AddControlToSubItem(visibleCell, cmbVisible);lv.AddControlToSubItem(colorCell, label);lv.AddControlToSubItem(numCell, num);item.SubItems.Add(visibleCell);item.SubItems.Add(colorCell);item.SubItems.Add(numCell);item.SubItems.Add(boolCell);item.SubItems.Add(imageCell);lv.Items.Add(item);lv.EndUpdate();}           }// color boxvoid bt_MouseClick(object sender, MouseEventArgs e){Label lb = (Label)sender;colorDialog1.Color = lb.BackColor;if (colorDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK){lb.BackColor = colorDialog1.Color;}}// get selected item valuesprivate void button1_Click(object sender, EventArgs e){if (lv.SelectedIndices.Count == 0){MessageBox.Show("没有选择");return;}for (int j = 0; j < lv.SelectedIndices.Count; j++){// itemint i = lv.SelectedIndices[j];var itemName = lv.Items[i] as ListViewItemBase;var itemVisible = itemName.SubItems[1] as ListViewControlSubItem;var itemColor   = itemName.SubItems[2] as ListViewControlSubItem;var itemValue   = itemName.SubItems[3] as ListViewControlSubItem;// controlsComboBox cmbVisible = itemVisible.Control as ComboBox;Label lb = itemColor.Control as Label;var num = itemValue.Control as NumericUpDown;// valuesstring name = itemName.Text;Color color = lb.BackColor;string visible = cmbVisible.Text;double value = Convert.ToDouble((num).Value);MessageBox.Show(string.Format("{0},{1},{2},{3}", name, color.ToString(), visible, value));}}private void lv_SelectedIndexChanged(object sender, EventArgs e){var ids = lv.SelectedIndices;}}

效果如:
在这里插入图片描述

二、代码下载

CSDN下载地址

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ArrayList源码讲解

ArrayList 底层采用的是数组队列&#xff0c;相当于动态数组。 ArrayList内部使用一个可重新分配的Object数组来存储元素&#xff0c;这个数组会随着元素的添加自动增长以容纳更多的元素&#xff0c;这就是所谓的“动态数组”。 1.实现了RandomAccess接口&#xff0c;可以随机…

rust嵌入式开发之总结

我们用rust开发的新版产品刚刚交付&#xff0c;已经在海上安装测试完毕并顺利投产。终于松了口气&#xff0c;同时也有时间和精力来做个全面的总结了。 这个产品&#xff0c;目前差不多有三版&#xff1a; 第一个版本是用crt-thread写的&#xff0c;投产后出了一个内存泄露的…

521源码-源码论坛-宝塔面板操作日志是存放在哪里的? 如何删除部分日志记录

我们帮别人搭建或者登录了&#xff08;不是自己权属的宝塔面板&#xff09;&#xff0c;会留下登录及操作的日志&#xff0c;我们不想留下这些操作日志&#xff0c;可以通过下面的方法处理掉&#xff0c;以达到无痕迹访问操作的目的&#xff1a; 如图所示的面板操作日志&#…

Python-3.12.0文档解读-内置函数sum()详细说明+记忆策略+常用场景+巧妙用法+综合技巧

一个认为一切根源都是“自己不够强”的INTJ 个人主页&#xff1a;用哲学编程-CSDN博客专栏&#xff1a;每日一题——举一反三Python编程学习Python内置函数 Python-3.12.0文档解读 目录 详细说明 sum(iterable, /, start0) 参数&#xff1a; 返回值&#xff1a; 注意事…

骑砍2霸主MOD开发(10)-游戏大地图(MapScene)制作

一.MapScene中初始化NavMeshFaceID与TerrainType public TerrainType GetFaceTerrainType(PathFaceRecord navMeshFace){switch (navMeshFace.FaceGroupIndex){case 1:return TerrainType.Plain;case 2:return TerrainType.Desert;case 3:return TerrainType.Snow;case 4:retur…

算法优化:空间与时间复杂度的权衡

引言 在软件开发中&#xff0c;算法的性能至关重要。算法的性能通常通过其时间复杂度和空间复杂度来衡量。时间复杂度指的是算法执行时间与输入规模的关系&#xff0c;而空间复杂度则关注算法执行过程中所占用的存储空间。本文将探讨如何权衡这两者&#xff0c;以实现算法的最…

排序方法大汇总

以下所有排序方法均以排升序为例 一.插入排序 1.直接插入排序 1>方法介绍&#xff1a;假定前n个数据有序&#xff0c;将第n1个数据依次与前n个数据相比&#xff0c;若比第i个数据小且比第i-1个数据大则插入两者之间 2>时间复杂度&#xff1a;O(N^2) 空间复杂度&#…

【JS】对象转变成数组

1、Object.keys() 方法&#xff1a; 将对象的键转换为数组 const a { name: aa,age: 18 }; const arr Object.keys(a); console.log(arr); // 输出 [name, age] 2、Object.values() 方法&#xff1a; 将对象的值转换为数组 const a { name: aa,age: 18 }; const arr Obj…

BUUCTF中的密码题目解密

BUUCTF 1.MD5 题目名称就是MD5&#xff0c;这个题目肯定和md5密码有关&#xff0c;下载题目&#xff0c;打开后发现这确实是一个md5加密的密文 Md5在线解密网站&#xff1a;md5在线解密破解,md5解密加密 经过MD5在线解密网站解密后&#xff0c;获取到flag为&#xff1a;flag{…

域名主机服务器配置失败的原因和解决方法

域名主机服务器配置失败的原因可能涉及多个方面&#xff0c;包括域名设置、DNS配置、服务器设置、网络问题等。以下是一些常见的原因和相应的解决方案&#xff1a; 1. DNS配置错误 原因&#xff1a; 域名解析错误&#xff1a;域名没有正确指向服务器的IP地址。 DNS记录未更新&a…

网络编程TCP

White graces&#xff1a;个人主页 &#x1f649;专栏推荐:Java入门知识&#x1f649; &#x1f649; 内容推荐:Java网络编程(下)&#x1f649; &#x1f439;今日诗词: 壮士当唱大风哥, 宵小之徒能几何&#xff1f;&#x1f439; ⛳️点赞 ☀️收藏⭐️关注&#x1f4ac;卑微…

CentOS7单用户模式,救援模式操作记录

CentOS7单用户模式&#xff0c;救援模式操作记录 1. 单用户模式 单用户模式进入不需要密码&#xff0c;无网络连接&#xff0c;拥有root权限&#xff0c;禁止远程登陆。一般用于用于系统维护&#xff0c;例如忘记root密码后可以通过进入单用户模式进行重置。 开机启动&#…

数据结构 实验 1

题目一&#xff1a;用线性表实现文具店的货品管理问题 问题描述&#xff1a;在文具店的日常经营过程中&#xff0c;存在对各种文具的管理问题。当库存文具不足或缺货时&#xff0c;需要进货。日常销售时需要出库。当盘点货物时&#xff0c;需要查询货物信息。请根据这些要求编…

使用低代码系统的意义与价值主要体现在哪里?

使用低代码系统的意义与价值主要体现在以下几个方面&#xff0c;这些观点基于驰骋低代码设计者的专业洞察和行业经验&#xff1a; 快速原型创建&#xff1a; 低代码平台通过提供图形化界面和预构建的模块&#xff0c;极大地加速了系统原型的创建过程。这意味着企业能够更快地验…

60 关于 SegmentFault 的一些场景 (1)

前言 呵呵 此问题主要是来自于 帖子 月经结贴 -- 《Segmentation Fault in Linux》 这里主要也是 结合了作者的相关 case, 来做的一些 调试分享 当然 很多的情况还是 蛮有意思 本文主要问题如下 1. 访问可执行文件中的 只读数据 2. 访问不存在的虚拟地址 3. 访问内核地址…

嵌入式笔试面试刷题(day16)

文章目录 前言一、PWM波形的占空比计算公式是什么&#xff1f;二、ADC和DAC在嵌入式系统中的应用场景有哪些&#xff1f;三、watchdog定时器的作用及其在系统中的使用是什么&#xff1f;四、JTAG接口在嵌入式开发中的作用是什么&#xff1f;五、实时操作系统(RTOS)的任务调度策…

嵌入式工程师人生提质的十大成长型思维分享

大家好,作为一名嵌入式开发者,很多时候,需要考虑个人未来的发展,人生旅途复杂多变,时常面临各种各样的挑战。如何在这个复杂多变的社会中稳步向前,不断成长,成为每个人都应该思考的问题。实际上,思维方式的差异决定我们应对挑战的能力与成长的速度。 第一:寻找自我坐…

HNCTF2022 REVERSE

[HNCTF 2022 WEEK2]esy_flower 简单花指令 Nop掉 然后整段u c p然后就反汇编 可能反编译的不太对&#xff0c;&#xff0c;看了别人的wp就是ida反编译的有问题 #include<stdio.h> #include<string.h> int main() {int i,j;char ch[]"c~scvdzKCEoDEZ[^roDICU…

NumPy应用(二)

numpy高效的处理数据&#xff0c;提供数组的支持&#xff0c; python 默认没有数组。 pandas 、 scipy 、 matplotlib 都依赖 numpy 。 pandas主要用于数据挖掘&#xff0c;探索&#xff0c;分析 maiplotlib用于作图&#xff0c;可视化 scipy进行数值计算&#xff0c;如&…

微软远程连接工具:Microsoft Remote Desktop for Mac 中文版

Microsoft Remote Desktop 是一款由微软开发的远程桌面连接软件&#xff0c;它允许用户从远程地点连接到远程计算机或虚拟机&#xff0c;并在远程计算机上使用桌面应用程序和文件。 下载地址&#xff1a;https://www.macz.com/mac/5458.html?idOTI2NjQ5Jl8mMjcuMTg2LjEyNi4yMz…