Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我可以告诉Visual Studio不要更改项目的DPI吗?_C#_Visual Studio_Visual Studio 2008_Dpi - Fatal编程技术网

C# 我可以告诉Visual Studio不要更改项目的DPI吗?

C# 我可以告诉Visual Studio不要更改项目的DPI吗?,c#,visual-studio,visual-studio-2008,dpi,C#,Visual Studio,Visual Studio 2008,Dpi,我在2008年开发了一个从.NET1.1到3.5的项目 如果我在Windows7上打开该项目,它会将所有内容的大小转换为120dpi大小。如果我用96 dpi打开它,它会变回来。有没有什么方法可以让我开发出来,这样它在两个方面都看起来不错,而且如果在具有不同DPI的系统上打开,Visual Studio不会更改大小 这个问题在这里的措辞/重复可能更好: 或在此: 要清楚我试图做的是防止控件在设计器中被具有不同DPI设置的多个开发人员使用时被调整大小。在我注意到这个问题的所有情况下,我一直在处

我在2008年开发了一个从.NET1.1到3.5的项目

如果我在Windows7上打开该项目,它会将所有内容的大小转换为120dpi大小。如果我用96 dpi打开它,它会变回来。有没有什么方法可以让我开发出来,这样它在两个方面都看起来不错,而且如果在具有不同DPI的系统上打开,Visual Studio不会更改大小

这个问题在这里的措辞/重复可能更好:

或在此:

要清楚我试图做的是防止控件在设计器中被具有不同DPI设置的多个开发人员使用时被调整大小。在我注意到这个问题的所有情况下,我一直在处理一个.NET1或.NET2项目,该项目最初升级为使用VisualStudio2008,现在是VisualStudio2010

更新(以防有人想与@Ben争夺加分):我有一个可以正确调整大小的表单,但窗口的大小会通过编程更改。因为设计师不知道尺寸,所以如果使用不同DPI的开发人员接触表单,窗口的大小将不正确。除了返回到不在运行时缩放UI之外,还有什么方法可以解决这个问题吗

例如:我为我的窗口声明了两种大小,如果开发人员在设计时使用120 dpi,这两种大小可以正常工作:

private static Size smallSize = new Size(960, 500);
private static Size largeSize = new Size(960, 615);
如果有人在96dpi设计器中编辑表单,我只是想知道我需要做些什么才能避免糟糕的设计回归。


另请参见:

由于我最近遇到了相同的问题,我想分享我的解决方法

第一:保持
AutoScaleMode=Font
!这将在运行时很好地工作,使您的应用程序能够感知DPI。(即使每个监视器都有DPI感知,也很酷)

然而,VisualStudio中的WinForms Designer实际上根据系统的DPI评估字体大小,并因此在认为必要时重新调整大小。这是问题的核心。触发此评估是因为字体通常以“点”指定其大小(以提供独立于DPI的用户体验)

我的解决方法是在设计时更改此选项:

private static Size smallSize = new Size(960, 500);
private static Size largeSize = new Size(960, 615);
  • 在窗体设计器中设置:
    Font=MS Sans;11px
    。这基本上是操作系统的默认字体,但用像素大小指定。因此,不会发生设计时重缩放
  • 现在,要在运行时恢复高DPI自适应,请将字体更改为使用点中指定的大小。例如,
    Font=systemfont.Default
    。在初始化组件之后的Ctor中有一个好位置

我在我的博客上写了关于我的解决方法的详细信息:

我没有检查它,但Windows 7中有一个应用程序的兼容模式。您可以尝试修改设置。我的理解是,设置会改变内置应用程序中控件的大小调整方式。当多个开发人员使用不同的DPI设置时,我要做的是防止控件在设计器中被调整大小。@mootinator:如果您仍然希望运行时调整大小行为(但如果它在设计时破坏了布局,则在运行时同样糟糕),许多开发人员选择迭代构造函数中的
控件
集合(在调用设计器生成的代码之后),并将
AutoSizeMode
更改为所需的运行时设置。这样的话,设计师就看不到它,因此不会影响你的布局。我想你让我指出了正确的方向。在调用
PerformAutoScale
自动调整不同开发人员屏幕的大小之前,我可能可以为设计的DPI设置一个常量,以便正确工作,并将其与
AutoScaleDimensions
进行比较。除非有一个简单的方法告诉VS在设计时改变我的尺寸。不管怎样,我的主要问题肯定是逆向思考问题。谢谢。@mootinator:不客气。您还可以查看Addins/Extensions库,看看是否有人制作了VS插件来处理此问题,但至少在运行时循环使用所有控件应该相当简单。