我有一个名为TMO(http://gotmo.co.uk)的Outlook Add In,其中有一个Windows窗体,单击Outlook工具栏中的“帮助”按钮即可打开该窗体。问题是,当我在Surface Pro Pro等高DPI屏幕上使用TMO时,表格呈现非常复杂(见截图)。但是在其他笔记本电脑上,表单呈现正确。
事实上,如果我在Surface Pro上运行测试应用程序,我从中加载相同的表单,它会正确呈现。请参阅随附的屏幕截图。
从我的阅读到目前为止,Windows Forms需要特殊处理才能在高DPI屏幕上正确呈现。但我无法弄清楚需要编写哪些代码来执行此操作。我的两个具体问题是
答案 0 :(得分:1)
在app.config中启用每个监视器的DPI感知
<System.Windows.Forms.ApplicationConfigurationSection>
<add key="DpiAwareness" value="PerMonitorV2" />
</System.Windows.Forms.ApplicationConfigurationSection>
参考 - https://msdn.microsoft.com/en-us/library/mt799789(v=vs.110).aspx
答案 1 :(得分:1)
基于用户界面正在其下运行的线程或进程的DPI感知模式,应用程序用户界面的行为可能有所不同。 Outlook可能以“系统” DPI感知模式运行,而在Outlook进程之外运行时,您的应用程序可能以其他模式运行。我不清楚您的代码是在Outlook进程中运行还是由Outlook进程启动,但我怀疑您正在处理意外的DPI感知模式更改。
在两种不同的情况下,我将使用sys-internals确定您的UI运行的模式。
如果您验证以“系统” DPI感知模式运行的UI代码,则可能会成功,这样一来,当代码在不同的上下文中运行时,不会感到惊讶/迷惑...如果发生了这种情况。
在我看来,WinForms代码假设它应该在系统DPI上运行,或者以某种方式与Outlook使用的DPI不同。
答案 2 :(得分:1)
我最终通过稍微重新设计表单来解决了问题,以便它们可以在所有屏幕上正确呈现。另外以下帮助
我能够跨表格重复执行上述3个步骤,并可靠地对其进行更改,使其可以在“高DPI”和常规屏幕上正常工作