当前位置: 首页 > 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);
}}

http://www.lryc.cn/news/108454.html

相关文章:

  • 更新页面无法回显
  • CS 144 Lab Four -- the TCP connection
  • 在Volo.Abp微服务中使用SignalR
  • 数据可视化(七)常用图表的绘制
  • 【ARM 常见汇编指令学习 8 - dsb sy 指令及 dsb 参数介绍】
  • YOLOv5本地模型训练报错解决
  • tomcat p12证书另存为nginx .crt证书和.key私钥
  • Docker的userland-proxy
  • uniapp封装request请求
  • Go如何构建高效API接口| 青训营
  • 【云原生K8s】二进制部署单master K8s+etcd集群
  • TRUNC(截取)函数的用法
  • IELAB-网络工程师的路由答疑10问(1)
  • OpenLayers入门,OpenLayers加载TopoJson数据,使用行政区划边界作为示例
  • 【图像去噪】基于原始对偶算法优化的TV-L1模型进行图像去噪研究(Matlab代码实现)
  • RISC-V基础之函数调用(五)函数递归调用及函数参数数量溢出(超出现有寄存器个数)约定(包含实例)
  • 力扣:48. 旋转图像(Python3)
  • HarmonyOS应用开发者基础与高级认证题库——中级篇
  • Python中实现多个列表、字典、元组、集合的连接
  • 1005 继续(3n+1)猜想
  • 基于图片、无人机、摄像头拍摄进行智能检测功能
  • Boost开发指南-4.2ignore_unused
  • 【Mybatis】XML映射文件
  • 11.2【MyBatis】主配置文件
  • linuxARM裸机学习笔记(2)----汇编LED灯实验
  • 用C语言实现插入排序算法
  • 2023 电赛E题--可能会出现的问题以及解决方法
  • Demystifying Prompts in Language Models via Perplexity Estimation
  • WEB集群——http、tomcat
  • Socks5代理:网络安全与爬虫之利器