防止表单自行缩放-DPI意识

时间:2018-10-11 18:27:20

标签: visual-studio-2017

在Visual Studio 2017中,已添加了“ DPI感知”功能。通过以下命令填充数据表时:

    Dim dt As DataTable = New DataTable
    da.Fill(dt) <---- This is the line where the rescaling occurs

在上面的行中,窗体将自身重新缩放为较小的尺寸,以匹配监视器在Windows中为其scale属性设置的内容。我该如何预防?我不希望表单重新缩放并更改大小,而只是保持原样。

注意:我知道您可以在“不知道DPI”状态下重新启动Visual Studio,但是即使在这种状态下,运行应用程序时也会发生上述问题。

1 个答案:

答案 0 :(得分:0)

这是解决此问题的方法:

  1. 在Visual Studio中,右键单击您的项目> Add> New Item..
  2. 从选项中选择Application.Manifest File。保留默认名称app.manifest。点击Add。这将为您的项目生成清单。 (注意:默认情况下,您的应用程序包括清单文件。
  3. 打开新创建的清单文件。一切都应该已经填充。取消注释此部分(通过删除之前的<!--和之后的-->

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

  1. 保存清单文件并进行编译。您的表格将不再重新缩放。

完整的清单文件:

<?xml version="1.0" encoding="utf-8"?>
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
 <assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
  <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
    <!-- UAC Manifest Options
         If you want to change the Windows User Account Control level replace the 
         requestedExecutionLevel node with one of the following.

    <requestedExecutionLevel  level="asInvoker" uiAccess="false" />
    <requestedExecutionLevel  level="requireAdministrator" uiAccess="false" />
    <requestedExecutionLevel  level="highestAvailable" uiAccess="false" />

        Specifying requestedExecutionLevel element will disable file and registry virtualization. 
        Remove this element if your application requires this virtualization for backwards
        compatibility.
    -->
    <requestedExecutionLevel level="asInvoker" uiAccess="false" />
  </requestedPrivileges>
</security>
</trustInfo>

<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
  <!-- A list of the Windows versions that this application has been tested on
       and is designed to work with. Uncomment the appropriate elements
       and Windows will automatically select the most compatible environment. -->

  <!-- Windows Vista -->
  <!--<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}" />-->

  <!-- Windows 7 -->
  <!--<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}" />-->

  <!-- Windows 8 -->
  <!--<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}" />-->

  <!-- Windows 8.1 -->
  <!--<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}" />-->

  <!-- Windows 10 -->
  <!--<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />-->

</application>
</compatibility>

<!-- Indicates that the application is DPI-aware and will not be automatically scaled by Windows at higher
   DPIs. Windows Presentation Foundation (WPF) applications are automatically DPI-aware and do not need 
   to opt in. Windows Forms applications targeting .NET Framework 4.6 that opt into this setting, should 
   also set the 'EnableWindowsFormsHighDpiAutoResizing' setting to 'true' in their app.config. -->

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


<!-- Enable themes for Windows common controls and dialogs (Windows XP and later) -->
<!--
<dependency>
<dependentAssembly>
  <assemblyIdentity
      type="win32"
      name="Microsoft.Windows.Common-Controls"
      version="6.0.0.0"
      processorArchitecture="*"
      publicKeyToken="6595b64144ccf1df"
      language="*"
    />
</dependentAssembly>
</dependency>
-->

</assembly>