首页 > 其他分享 >高dpi下,Vb.net调整控件位置的小经验

高dpi下,Vb.net调整控件位置的小经验

时间:2024-03-12 20:13:02浏览次数:26  
标签:控件 Vb DefaultDPI Width Single dpi net DPI

 高dpi下,Vb.net调整控件位置的小经验 boy8199/3vdo/club

最近写了一个捕快TXT网文采集软件,结果发现在DPI不同的情况下,软件布局会变形. 找了半天原因才发现是DPI的问题,默认系统的dpi是96(100%)

现在显示器的屏幕比较大,所以好多人会把 显示放大到125%或150% 导致程序控件变形.

解决方案1\禁止软件跟随系统的dpi变化, \

(1)这是摘抄了一个方法.不一定对

<application xmlns="urn:schemas-microsoft-com:asm.v3">
  <windowsSettings>
    <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings/">true</dpiAware> </windowsSettings> </application>

(2)禁用方法: autosalemode=none 关闭各个控件的自动尺寸模式

2\ 就是 让软件跟随dpi自动变化,  把 autosalemode= 设置为DPI, 让控件跟随dpi进行自动调整. 因为该属性默认是根据font变化的,所以会变形.

但是即使设置了autosalemode=dpi ,依然有不少控件会变化, 这里好像有一个bug,有时控件会变形 有时不会变形,没有规律.

经过对比实验发现, 要使用 talelayoutpanel来进行控件布局,这样能让大多数控件自我进行调整.

个别不能自我调整的控件(比如靠右锁定的控件),我用下面的代码进行了调整.

 1 ''' <summary>
 2     ''' ' 根据DPI 调整个别控件的位置和大小
 3     ''' </summary>
 4     ''' <param name="DefaultDPI">缺省dip设置为96</param>
 5     Private Sub AdjustControlsForDpiChange(Optional DefaultDPI As Single = 96.0!)
 6         ' 获取当前窗体的 DPI
 7         Dim currentDpiX As Single = Me.CreateGraphics().DpiX
 8         Dim currentDpiY As Single = Me.CreateGraphics().DpiY
 9 
10         If currentDpiX <> DefaultDPI OrElse currentDpiY <> DefaultDPI Then
11 
12             ' 计算缩放比例
13             Dim scaleX As Single = currentDpiX / DefaultDPI
14             Dim scaleY As Single = currentDpiY / DefaultDPI
15 
16             pnlKaiCaiMianBan.Width = CInt(pnlKaiCaiMianBan.Width * scaleX)
17             pnlKaiCaiMianBan.Left = Me.Width - pnlKaiCaiMianBan.Width
      end sub

 

标签:控件,Vb,DefaultDPI,Width,Single,dpi,net,DPI
From: https://www.cnblogs.com/MadeInChinese/p/18069118

相关文章

  • C#/.NET/.NET Core拾遗补漏合集(持续更新)
    前言在这个快速发展的技术世界中,时常会有一些重要的知识点、信息或细节被忽略或遗漏。《C#/.NET/.NETCore拾遗补漏》专栏我们将探讨一些可能被忽略或遗漏的重要知识点、信息或细节,以帮助大家更全面地了解这些技术栈的特性和发展方向。GitHub开源地址https://github.com/Y......
  • 基于Vue(提供Vue2/Vue3版本)和.Net Core前后端分离、跨平台的快速开发框架
    前言今天大姚给大家推荐一款基于Vue(提供Vue2/Vue3版本)和.NetCore前后端分离、开源免费(MITLicense)、强大、跨平台的快速开发框架,并且框架内置代码生成器(解决重复性工作,提高开发效率),支持移动端(iOS/Android/H5/微信小程序):Vue.NetCore。提高开发生产效率、避免996可以考虑试试这......
  • 将Asp.net Core 微服务容器部署到 Kubernetes
    将微服务容器部署到KubernetesKubernetes会为你运行容器,需要通过YAML文件描述希望Kubernetes执行的操作,在Kubernetes上部署和运行后端服务简单操作如下步骤安装Kubernetes工具和实现我们需要同时安装kubectl工具和Kubernetes实现按照参考:https://www.cnblogs.co......
  • Error running 'Tomcat 8.5.27': Unable to open debugger port (127.0.0.1:2887): ja
    火绒安全-导致的tomcat8启动异常 一、问题由来最近有个朋友在学习使用IDEA配置tomcat8.5.99的时候,使用一切都正常,直到学习到使用Servlet实现文件下载功能的时候,出现问题。写了一个简单的Servlet用来测试文件下载,直接把路径放在浏览器中测试的时候,可以正常下载。可是不......
  • .Net 创建webhooks Demo,可用于Gitlab等Workflow
    框架:.Net6、webapipackage:GitLabApiClient定义body参数DTO,不同event有不同的参数,具体可参考gitlab文档:https://docs.gitlab.com/ee/user/project/integrations/webhook_events.htmlpublicclassGitLabWebhookData{publicstringRef{get;set;}publicstring......
  • .Net Core中使用DiagnosticSource进行日志记录
    System.Diagnostics.DiagnosticSource可以丰富地记录程序中地日志,包括不可序列化的类型(例如HttpResponseMessage或HttpContext)。System.Diagnostics.DiagnosticSource通过订阅发布模式运行,我们可以根据自己地需要发现数据源并订阅感兴趣的数据源。 DiagnosticSource与......
  • 如何在Visual Studio中调试.NET源码
    今天偶然在看别人代码时,发现在他的代码里使用了Any判断List<T>是否为空。我一般的做法是先判断是否为null,再判断Count。看了一下Count的源码如下:1[__DynamicallyInvokable]2publicintCount3{4[__DynamicallyInvokable]5get6......
  • C++ Qt开发:QNetworkAccessManager网络接口组件
    Qt是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍如何运用QNetworkAccessManager组件实现Web网页访问。QNetworkAccessManager是Qt网络模块中的关......
  • cnetos7 ISO 镜像自定义制作
    简介:  此自定义镜像针对centos7系统版本,通过tar打包原系统服务将其放入ISO镜像中在安装时执行解压导入新安装系统中实现系统服务的自定义安装。针对cnetos7目前只测试出这一种方案,暂时没找到其他好的方案实现系统的模板ISO制作,目前版本存在缺陷镜像中的tar包非加密......
  • Linux之ps -ef进程命令及netstat网络状态命令简记
    ps-ef释义:ps-ef表示查看全格式的全部进程。ps是linux下最常用的也是非常强大的进程查看命令,常配合管道命令|和查找命令grep同时执行来查看特定进程。参数含义:-e显示所有进程。-f全格式。-h不显示标题。-l长格式。-w宽输出。a显示终端上的所有进程,包括其他用户的......