请选择 进入手机版 | 继续访问电脑版
 找回密码
 立即注册

QQ登录

只需一步,快速开始

Richard.Ma 讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2025-7-1 18:04  /   查看:54  /  回复:0
越来越多的用户使用高分屏作为客户端显示器,通常会将屏幕缩放比例设置为大于100%,此时winforms应用如果没有配置对高dpi的支持,可能出现显示大小不符预期,显示模糊,错位等问题

要给Spread控件添加对高DPI的支持,首先也需要先给所在的winform应用本身设置高分支持

.NET Framework 4.7 以上的应用为例,设置步骤如下
1.将包含以下信息的 App.config 添加到表单的根目录(与 Program.cs 相同的目录)。

  1.                             <?xml version="1.0" encoding="utf-8"?>
  2. <configuration>
  3.   <startup>
  4.     <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7"/>
  5.   </startup>
  6.   <System.Windows.Forms.ApplicationConfigurationSection>
  7.     <add key="DpiAwareness" value="PerMonitorV2"/>
  8.     <!-- Uncomment each value to disable the fixes one by one. -->
  9.     <!--
  10.     <add key="Form.DisableSinglePassScalingOfDpiForms" value="true"/>
  11.     <add key="ToolStrip.DisableHighDpiImprovements" value="true"/>
  12.     <add key="CheckedListBox.DisableHighDpiImprovements" value="true"/>
  13.     <add key="MonthCalendar.DisableHighDpiImprovements" value="true"/>
  14.     <add key="AnchorLayout.DisableHighDpiImprovements" value="true"/>
  15.     <add key="DataGridView.DisableHighDpiImprovements" value="true"/>
  16.     -->
  17.   </System.Windows.Forms.ApplicationConfigurationSection>
  18. </configuration>

  19.                         
复制代码
2.将包含以下信息的 App.manifest 添加到表单的根目录(与 Program.cs 目录相同)。

  1.                             <?xml version="1.0" encoding="utf-8"?>
  2. <assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
  3.   <assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
  4.   <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
  5.     <security>
  6.       <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
  7.         <!-- UAC Manifest Options
  8.              If you want to change the Windows User Account Control level replace the
  9.              requestedExecutionLevel node with one of the following.
  10.         <requestedExecutionLevel  level="asInvoker" uiAccess="false" />
  11.         <requestedExecutionLevel  level="requireAdministrator" uiAccess="false" />
  12.         <requestedExecutionLevel  level="highestAvailable" uiAccess="false" />
  13.             Specifying requestedExecutionLevel element will disable file and registry virtualization.
  14.             Remove this element if your application requires this virtualization for backwards
  15.             compatibility.
  16.         -->
  17.         <requestedExecutionLevel level="asInvoker" uiAccess="false" />
  18.       </requestedPrivileges>
  19.     </security>
  20.   </trustInfo>
  21.   <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
  22.     <application>
  23.       <!-- A list of the Windows versions that this application has been tested on and is
  24.            is designed to work with. Uncomment the appropriate elements and Windows will
  25.            automatically selected the most compatible environment. -->
  26.      
  27.       <!-- Windows 10 -->
  28.       <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />
  29.     </application>
  30.   </compatibility>
  31.   <!--<application xmlns="urn:schemas-microsoft-com:asm.v3">
  32.     <windowsSettings>
  33.       <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware>
  34.     </windowsSettings>
  35.   </application>-->

  36. </assembly>

  37.                         
复制代码
3.验证 Program.cs 是否具有以下设置。

  1.                             static class Program
  2.     {
  3.         /// <summary>
  4.         /// The main entry point for the application.
  5.         /// </summary>
  6.         [STAThread]
  7.         static void Main()
  8.         {
  9.             Application.EnableVisualStyles();
  10.             Application.SetCompatibleTextRenderingDefault(false);
  11.             Application.Run(new Form1());
  12.         }
  13.     }

  14.                         
复制代码
4.在 Form1.designer.cs 中添加以下对Form和Spread的设置

  1.                             this.fpSpread1.SpreadScaleMode = FarPoint.Win.Spread.ScaleMode.ZoomDpiSupport;
  2. this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F);
  3. this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;

  4.                         
复制代码




0 个回复

您需要登录后才可以回帖 登录 | 立即注册
返回顶部