C# 从代码创建选型卡+表格

news2025/4/8 21:41:35
private int tabNum = 1;      
private int sensorNum = 5;      
private void InitializeUI()
{
    // 创建右侧容器面板
    Panel rightPanel = new Panel
    {
        Dock = DockStyle.Right,
        Width = 300,
        BackColor = SystemColors.ControlDark,
        Parent = this
    };

    // 根据防区数量创建内容
    if (tabNum > 1)
    {
        CreateTabbedContent(rightPanel);
    }
    else
    {
        CreateSingleTable(rightPanel);
    }
}

private void CreateTabbedContent(Panel parent)
{
    TabControl tabControl = new TabControl
    {
        Dock = DockStyle.Fill,
        Parent = parent
    };

    // 表格1
    TabPage tab1 = new TabPage("表格1");
    tabControl.TabPages.Add(tab1);
    CreateSingleTable(tab1);

    // 表格2
    TabPage tab2 = new TabPage("表格2");
    tabControl.TabPages.Add(tab2);
    CreateSingleTable(tab2);
}

private void CreateSingleTable(Control container)
{
    DataGridView dgv = new DataGridView
    {
        Dock = DockStyle.Fill,
        AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill,
        ScrollBars = ScrollBars.Vertical, // 最小化高度
        AllowUserToAddRows = false, // 关键修复:禁止显示空白新行
        RowHeadersVisible = false, // 关键修改:隐藏最左侧行头列
        Parent = container
    };

    // 创建列
    dgv.Columns.Add("LineOrder", "线序");

    dgv.Columns.Add("Val1", "电压值");

    DataGridViewCheckBoxColumn enableColumn = new DataGridViewCheckBoxColumn();
    enableColumn.HeaderText = "在线";
    dgv.Columns.Add(enableColumn);

    // 动态行
    for (int i = 1; i <= sensorNum; i++)
    {
        dgv.Rows.Add(i,  i + "0", false);
    }

    // 自动调整行高
    dgv.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells;
}

private void Form1_Load(object sender, EventArgs e)
{
   InitializeUI();
}

在这里插入图片描述
在这里插入图片描述
//修改后

private int tabNum = 2;      
private int sensorNum = 5;      
private void InitializeUI()
{
    //panelTabs 是 一个panel

    // 根据防区数量创建内容
    if (tabNum > 1)
    {
        CreateTabbedContent(panelTabs);
    }
    else
    {
        CreateSingleTable(panelTabs);
    }
}

private void CreateTabbedContent(Panel parent)
{
    TabControl tabControl = new TabControl
    {
        Dock = DockStyle.Fill,
        Parent = parent
    };

    // 表格1
    TabPage tab1 = new TabPage("表格1");
    tabControl.TabPages.Add(tab1);
    CreateSingleTable(tab1);

    // 表格2
    TabPage tab2 = new TabPage("表格2");
    tabControl.TabPages.Add(tab2);
    CreateSingleTable(tab2);
}

private void CreateSingleTable(Control container)
{
    DataGridView dgv = new DataGridView
    {
        Dock = DockStyle.Fill,
        AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill,
        //ScrollBars = ScrollBars.Vertical, // 最小化高度 仅在需要时显示滚动条
        ScrollBars = ScrollBars.None,
        AllowUserToAddRows = false, // 关键修复:禁止显示空白新行
        RowHeadersVisible = false, // 关键修改:隐藏最左侧行头列
        BackgroundColor = container.BackColor, // 继承面板颜色
        Parent = container
    };

    // 创建列
    dgv.Columns.Add("LineOrder", "线序");

    dgv.Columns.Add("Val1", "电压值");

    DataGridViewCheckBoxColumn enableColumn = new DataGridViewCheckBoxColumn();
    enableColumn.HeaderText = "在线";
    dgv.Columns.Add(enableColumn);

    // 动态行
    for (int i = 1; i <= sensorNum; i++)
    {
        dgv.Rows.Add(i,  i, false);
    }

    // 自动调整行高
    dgv.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells;

    // 计算并设置表格高度(关键步骤)
    //int headerHeight = dgv.ColumnHeadersHeight;          // 列头高度
    //int rowHeight = dgv.RowTemplate.Height;               // 单行高度
    int totalHeight = headerHeight + (rowHeight * 6);
    //int totalHeight = headerHeight + (rowHeight * sensorNum);
    //dgv.Height = totalHeight;

}

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

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

相关文章

OpenCV 从入门到精通(day_02)

1. 边缘填充 为什么要填充边缘呢&#xff1f;我们以下图为例&#xff1a; 可以看到&#xff0c;左图在逆时针旋转45度之后原图的四个顶点在右图中已经看不到了&#xff0c;同时&#xff0c;右图的四个顶点区域其实是什么都没有的&#xff0c;因此我们需要对空出来的区域进行一个…

Ceph异地数据同步之-RBD异地同步复制(上)

#作者&#xff1a;闫乾苓 文章目录 前言基于快照的模式&#xff08;Snapshot-based Mode&#xff09;工作原理单向同步配置步骤单向同步复制测试双向同步配置步骤双向同步复制测试 前言 Ceph的RBD&#xff08;RADOS Block Device&#xff09;支持在两个Ceph集群之间进行异步镜…

【C++】STL库_stack_queue 的模拟实现

栈&#xff08;Stack&#xff09;、队列&#xff08;Queue&#xff09;是C STL中的经典容器适配器 容器适配器特性 不是独立容器&#xff0c;依赖底层容器&#xff08;deque/vector/list&#xff09;通过限制基础容器接口实现特定访问模式不支持迭代器操作&#xff08;无法遍历…

一周学会Pandas2 Python数据处理与分析-编写Pandas2 HelloWord项目

锋哥原创的Pandas2 Python数据处理与分析 视频教程&#xff1a; 2025版 Pandas2 Python数据处理与分析 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili 我们首先准备一个excel文件&#xff0c;用来演示pandas操作数据集(数据的集合)。excel文件属于数据集的一种&#xf…

【易订货-注册/登录安全分析报告】

前言 由于网站注册入口容易被机器执行自动化程序攻击&#xff0c;存在如下风险&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露&#xff0c;不符合国家等级保护的要求。短信盗刷带来的拒绝服务风险 &#xff0c;造成用户无法登陆、注册&#xff0c;大量收到垃圾短信的…

如何在Windows上找到Python安装路径?两种方法快速定位

原文&#xff1a;如何在Windows上找到Python安装路径&#xff1f;两种方法快速定位 | w3cschool笔记 在 Windows 系统上找到 Python 的安装路径对于设置环境变量或排查问题非常重要。本文将介绍两种方法&#xff0c;帮助你找到 Python 的安装路径&#xff1a;一种是通过命令提…

lvgl避坑记录

一、log调试 #if LV_USE_LOG && LV_LOG_LEVEL > LV_LOG_LEVEL_INFOswitch(src_type) {case LV_IMG_SRC_FILE:LV_LOG_TRACE("lv_img_set_src: LV_IMG_SRC_FILE type found");break;case LV_IMG_SRC_VARIABLE:LV_LOG_TRACE("lv_img_set_src: LV_IMG_S…

element-plus中,表单校验的使用

目录 一.案例1&#xff1a;给下面的表单添加校验 1.目的要求 2.步骤 ①给需要校验的el-form-item项&#xff0c;添加prop属性 ②定义一个表单校验对象&#xff0c;里面存放了每一个prop的检验规则 ③给el-form组件&#xff0c;添加:rules属性 ④给el-form组件&#xff0…

PyTorch复现线性模型

【前言】 本专题为PyTorch专栏。从本专题开始&#xff0c;我将通过使用PyTorch编写基础神经网络&#xff0c;带领大家学习PyTorch。并顺便带领大家复习以下深度学习的知识。希望大家通过本专栏学习&#xff0c;更进一步了解人更智能这个领域。 材料来源&#xff1a;2.线性模型_…

Kafka+Zookeeper从docker部署到spring boot使用完整教程

文章目录 一、Kafka1.Kafka核心介绍&#xff1a;​核心架构​核心特性​典型应用 2.Kafka对 ZooKeeper 的依赖&#xff1a;3.去 ZooKeeper 的演进之路&#xff1a;注&#xff1a;&#xff08;本文采用ZooKeeper3.8 Kafka2.8.1&#xff09; 二、Zookeeper1.核心架构与特性2.典型…

RK3568驱动 SPI主/从 配置

一、SPI 控制器基础配置(先说主的配置&#xff0c;后面说从的配置) RK3568 集成高性能 SPI 控制器&#xff0c;支持主从双模式&#xff0c;最高传输速率 50MHz。设备树配置文件路径通常为K3568/rk356x_linux_release_v1.3.1_20221120/kernel/arch/arm64/boot/dts/rockchip。 …

【全队项目】智能学术海报生成系统PosterGenius--风格个性化调整

​ &#x1f308; 个人主页&#xff1a;十二月的猫-CSDN博客 &#x1f525; 系列专栏&#x1f3c0;大模型实战训练营 ​&#x1f4aa;&#x1f3fb; 十二月的寒冬阻挡不了春天的脚步&#xff0c;十二点的黑夜遮蔽不住黎明的曙光 1.前言 PosterGenius致力于开发一套依托DeepSeek…

【系统移植】(六)第三方驱动移植

【系统移植】&#xff08;六&#xff09;第三方驱动移植 文章目录 【系统移植】&#xff08;六&#xff09;第三方驱动移植1.编译驱动进内核方法一&#xff1a;编译makefile方法二&#xff1a;编译kconfig方法三&#xff1a;编译成模块 2.字符设备框架 编译驱动进内核a. 选择驱…

STM32实现一个简单电灯

新建工程的步骤 建立工程文件夹&#xff0c;Keil中新建工程&#xff0c;选择型号工程文件夹里建立Start、Library、User等文件夹&#xff0c;复制固件库里面的文件到工程文件夹工程里对应建立Start、Library、User等同名称的分组&#xff0c;然后将文件夹内的文件添加到工程分组…

【shiro】shiro反序列化漏洞综合利用工具v2.2(下载、安装、使用)

1 工具下载 shiro反序列化漏洞综合利用工具v2.2下载&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1kvQEMrMP-PZ4K1eGwAP0_Q?pwdzbgp 提取码&#xff1a;zbgp其他工具下载&#xff1a; 除了该工具之外&#xff0c;github上还有其他大佬贡献的各种工具&#xff0c;有…

vue进度条组件

<div class"global-mask" v-if"isProgress"><div class"contentBox"><div class"progresstitie">数据加载中请稍后</div><el-progress class"progressStyle" :color"customColor" tex…

CSRF跨站请求伪造——入门篇【DVWA靶场low级别writeup】

CSRF跨站请求伪造——入门篇 0. 前言1. 什么是CSRF2. 一次完整的CSRF攻击 0. 前言 本文将带你实现一次完整的CSRF攻击&#xff0c;内容较为基础。需要你掌握的基础知识有&#xff1a; 了解cookie&#xff1b;已经安装了DVWA的靶场环境&#xff08;本地的或云的&#xff09;&am…

Qt基础:主界面窗口类QMainWindow

QMainWindow 1. QMainWindow1.1 菜单栏添加菜单项菜单项信号槽 1.2 工具栏添加工具按钮工具栏的属性设置 1.3 状态栏1.4 停靠窗口&#xff08;Dock widget&#xff09; 1. QMainWindow QMainWindow是标准基础窗口中结构最复杂的窗口, 其组成如下: 提供了菜单栏, 工具栏, 状态…

32f4,usart2fifo,2025

usart2fifo.h #ifndef __USART2FIFO_H #define __USART2FIFO_H#include "stdio.h" #include "stm32f4xx_conf.h" #include "sys.h" #include "fifo_usart2.h"//extern u8 RXD2_TimeOut;//超时检测//extern u8 Timer6_1ms_flag;exte…

激光模拟单粒子效应试验如何验证CANFD芯片的辐照阈值?

在现代航天电子系统中&#xff0c;CANFD&#xff08;Controller Area Network with Flexible Data-rate&#xff09;芯片作为关键的通信接口元件&#xff0c;其可靠性与抗辐射性能直接关系到整个系统的稳定运行。由于宇宙空间中存在的高能粒子辐射&#xff0c;芯片可能遭受单粒…