当前位置: 首页 > news >正文

winform panel中放置 usercontrol ,设置usercontrol随着dpi分辨率变化

在 WinForms 中,如果要使 UserControl 随着 DPI 分辨率的变化而自适应调整大小,可以遵循以下步骤:

  1. 使用 Anchor 和 Dock 属性:在 UserControl 中的控件布局时,使用 Anchor 和 Dock 属性来适应父控件的大小变化。

  2. 处理 DPI 变化事件:在 UserControl 中订阅系统 DPI 变化事件,并在事件处理程序中重新计算控件的大小和位置。

下面是一个简单的示例代码,演示了如何实现这些步骤:

using System;
using System.Drawing;
using System.Windows.Forms;public class DPIAwareUserControl : UserControl
{public DPIAwareUserControl(){// 订阅系统 DPI 变化事件SystemEvents.DisplaySettingsChanged += SystemEvents_DisplaySettingsChanged;}// 处理 DPI 变化事件private void SystemEvents_DisplaySettingsChanged(object sender, EventArgs e){// 在 DPI 变化时重新计算控件大小和位置UpdateControlSizeAndPosition();}protected override void OnLoad(EventArgs e){base.OnLoad(e);// 初始化时,设置控件的初始大小和位置UpdateControlSizeAndPosition();}private void UpdateControlSizeAndPosition(){// 获取当前 DPI 缩放比例float dpiScale = GetCurrentDPIScale();// 设置控件的新大小和位置int newWidth = (int)Math.Round(100 * dpiScale); // 以 100 为基准大小进行缩放int newHeight = (int)Math.Round(50 * dpiScale);  // 以 50 为基准大小进行缩放// 设置控件大小this.Size = new Size(newWidth, newHeight);// 可以使用 Anchor 和 Dock 属性来调整控件中的子控件布局,使其适应新的大小// Example: this.myChildControl.Anchor = AnchorStyles.Top | AnchorStyles.Left;}private float GetCurrentDPIScale(){using (Graphics graphics = this.CreateGraphics()){// 获取当前 DPI 缩放比例float dpiX = graphics.DpiX;float dpiY = graphics.DpiY;// 假设 X 和 Y 方向的 DPI 缩放比例一致(通常情况下都是这样的)return dpiX / 96.0f; // 96 DPI 是标准的 100% 缩放比例}}protected override void Dispose(bool disposing){if (disposing){// 在销毁控件时取消订阅 DPI 变化事件SystemEvents.DisplaySettingsChanged -= SystemEvents_DisplaySettingsChanged;}base.Dispose(disposing);}
}

请注意,该示例中只是简单地根据 DPI 缩放比例调整了 UserControl 的大小,你可以根据具体的布局和需求进一步调整和优化代码。在实际应用中,还需要考虑控件内部布局和控件的子控件等因素。同时,不同版本的 .NET Framework 和 Windows 版本可能对 DPI 自适应有不同的处理方式,因此建议在实际应用中进行全面的测试。

      private void UC_Ct_Load(object sender, EventArgs e){if (Tool.GetSreenScale() >= 1.5){//取消this.btnCancel.BorderRadius = 3;this.panelCancel.Height = 28;this.btnCancel.Height = 26;this.btnCancel.Location = new System.Drawing.Point(0, 0);
}}

相关文章:

winform panel中放置 usercontrol ,设置usercontrol随着dpi分辨率变化

在 WinForms 中,如果要使 UserControl 随着 DPI 分辨率的变化而自适应调整大小,可以遵循以下步骤: 使用 Anchor 和 Dock 属性:在 UserControl 中的控件布局时,使用 Anchor 和 Dock 属性来适应父控件的大小变化。 处理…...

更新页面无法回显

需求与问题: 在菜品管理开发中,我需要修改菜品,第一步是回显页面,但在我再三确认代码无误的情况下依旧无法回显内容 问题发现与解决: 经过排查,我发现我的DishDTO内容如下: Data public clas…...

CS 144 Lab Four -- the TCP connection

CS 144 Lab Four -- the TCP connection TCPConnection 简述TCP 状态图代码实现完整流程追踪 测试 对应课程视频: 【计算机网络】 斯坦福大学CS144课程 Lab Three 对应的PDF: Lab Checkpoint 4: down the stack (the network interface) TCPConnection 简述 TCPConnection 需…...

在Volo.Abp微服务中使用SignalR

假设需要通过SignalR发送消息通知,并在前端接收消息通知的功能 创建SignalR服务 在项目中引用 abp add-package Volo.Abp.AspNetCore.SignalR在Module文件中添加对模块依赖 [DependsOn(...typeof(AbpAspNetCoreSignalRModule))] public class IdentityApplicati…...

数据可视化(七)常用图表的绘制

1. #seaborn绘制常用图表 #折线图 #replot(x,y,kind,data) #lineplot(x,y,data) #直方图 #displot(data,rug) #条形图 #barplot&…...

【ARM 常见汇编指令学习 8 - dsb sy 指令及 dsb 参数介绍】

文章目录 ARM dsb sy 指令 上篇文章:ARM 常见汇编指令学习 7 - LDR 指令与LDR伪指令及 mov指令 下篇文章:ARM 常见汇编指令学习 9 - 缓存管理指令 DC 与 IC ARM dsb sy 指令 数据同步屏障是一种特殊类型的内存屏障。 只有当DSB指令执行完毕后&#xff…...

YOLOv5本地模型训练报错解决

报错解决 页面文件太小,无法完成操作 训练过程中,发生下图所示的报错,同时pycharm崩溃 1. 更改虚拟内存 进入高级系统设置,应该都会进,就不说过程了 设置虚拟内存大小 2. 减小占用内容大小 新建一个fixNvPe.py程序…...

tomcat p12证书另存为nginx .crt证书和.key私钥

tomcat p12证书另存为nginx .crt证书和.key私钥 Tomcat使用的.pfx或.keystore文件都是私钥及公钥证书一起的,通过pin保证安全;nginx只需要使用.pem或.crt公钥证书文件和.key私钥即可,如果原ssl证书不方便重新下载,在已有tomcat证…...

Docker的userland-proxy

前言 Docker针对端口映射前后有两种方案,一种是1.7版本之前docker-proxyiptables DNAT 的方式;另一种则是1.7版本(及之后)提供的完全由iptables DNAT实现的端口映射。不过在目前docker 1.9.1中,前一种方式依旧是默认方式。但是从Docker 1.7版…...

uniapp封装request请求

在基础文件里面创建一个api文件 在创建两个 js文件 http.js 里面封装 request 请求 let baseUrl https://white.51.toponet.cn; //基地址 export const request (options {}) > {//异步封装接口,使用Promise处理异步请求return new Promise((resolve, reject…...

Go如何构建高效API接口| 青训营

Go语言作为一个高效的静态类型语言,在构建API服务时也表现出了很大的优势。本文将介绍如何使用Go语言构建高效的API服务,帮助开发者更好地应对日益增长的API需求。 一、选择适合的框架 首先,选择适合的框架是构建高效API服务的重要一步。在…...

【云原生K8s】二进制部署单master K8s+etcd集群

一、实验设计 mater节点master01192.168.190.10kube-apiserver kube-controller-manager kube-scheduler etcd node节点node01192.168.190.20kubelet kube-proxy docker (容…...

TRUNC(截取)函数的用法

TRUNC函数在Oracle中用于截断日期、时间或数字的精度。其语法如下: 截取数字: TRUNC(number [, precision])其中: number 表示要截断的数字。 precision表示截断的精度。可以是负数、整数或者默认为空。正数表示保留小数位数,负…...

IELAB-网络工程师的路由答疑10问(1)

各位同学,我相信对于许多新学习的同学而言,在刚接触该的时候总会产生许多问题,今天 我们就简单讲解一下常见的几种问题: 什么是路由? 简单来讲,路由通常发生在网络层,为什么呢?首先…...

OpenLayers入门,OpenLayers加载TopoJson数据,使用行政区划边界作为示例

专栏目录: OpenLayers入门教程汇总目录 前言 本章讲解一下OpenLayers如何加载解析TopoJson格式的数据。 TopoJson介绍 TopoJson是用于表示地理空间数据的格式。是GeoJson格式的改进版,相比 GeoJSON 直接使用 Polygon、Point 之类的几何体来表示图形的方法,TopoJSON 中的…...

【图像去噪】基于原始对偶算法优化的TV-L1模型进行图像去噪研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...

RISC-V基础之函数调用(五)函数递归调用及函数参数数量溢出(超出现有寄存器个数)约定(包含实例)

首先先解释一下栈在函数调用中的作用,更详细的部分请参照考研复习之数据结构笔记(五)栈和队列(上)(包含栈的相关内容)_管二狗赶快去工作!的博客-CSDN博客 函数嵌套调用栈的作用是用…...

力扣:48. 旋转图像(Python3)

题目: 给定一个 n n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。 你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。 来源:力扣(LeetCode) 链接&…...

HarmonyOS应用开发者基础与高级认证题库——中级篇

系列文章目录 HarmonyOS应用开发者基础与高级认证题库——基础篇 HarmonyOS应用开发者基础与高级认证题库——中级篇 文章目录 系列文章目录前言一、判断二、单选三、多选 前言 今天刚换了台果子手机就收到了华子鸿蒙开发认证邀请(认证链接)&#xff0…...

Python中实现多个列表、字典、元组、集合的连接

目录 目录 前言 一、列表 1、运算符 2、extend()方法 3、解包操作 * 二、字典 1、update()方法 2、解包操作 ** 三、元组 1、 运算符 2、解包操作 * 四、集合 1、union方法 2、| 运算符 3、解包操作 * 五、不同类…...

Java 语言特性(面试系列2)

一、SQL 基础 1. 复杂查询 (1)连接查询(JOIN) 内连接(INNER JOIN):返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...

如何在看板中体现优先级变化

在看板中有效体现优先级变化的关键措施包括:采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中,设置任务排序规则尤其重要,因为它让看板视觉上直观地体…...

Java - Mysql数据类型对应

Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...

如何将联系人从 iPhone 转移到 Android

从 iPhone 换到 Android 手机时,你可能需要保留重要的数据,例如通讯录。好在,将通讯录从 iPhone 转移到 Android 手机非常简单,你可以从本文中学习 6 种可靠的方法,确保随时保持连接,不错过任何信息。 第 1…...

【单片机期末】单片机系统设计

主要内容:系统状态机,系统时基,系统需求分析,系统构建,系统状态流图 一、题目要求 二、绘制系统状态流图 题目:根据上述描述绘制系统状态流图,注明状态转移条件及方向。 三、利用定时器产生时…...

CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云

目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...

return this;返回的是谁

一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请,不同级别的经理有不同的审批权限: // 抽象处理者:审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...

排序算法总结(C++)

目录 一、稳定性二、排序算法选择、冒泡、插入排序归并排序随机快速排序堆排序基数排序计数排序 三、总结 一、稳定性 排序算法的稳定性是指:同样大小的样本 **(同样大小的数据)**在排序之后不会改变原始的相对次序。 稳定性对基础类型对象…...

基于SpringBoot在线拍卖系统的设计和实现

摘 要 随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统,主要的模块包括管理员;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...

腾讯云V3签名

想要接入腾讯云的Api,必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口,但总是卡在签名这一步,最后放弃选择SDK,这次终于自己代码实现。 可能腾讯云翻新了接口文档,现在阅读起来,清晰了很多&…...