2017-04-04 9 views
5

पर एक Winform क्यों अलग दिखाया गया है हमारे पास विरासत .net विंडोज़ एप्लिकेशन है। हमने इसे पहले से ही वेब एप्लिकेशन के साथ बदल दिया है, लेकिन अभी भी प्रशासनिक कार्यों के लिए विंडोज़ फॉर्म एप्लिकेशन का उपयोग करें।एक 4x मॉनीटर

जब यह एप्लिकेशन 4k मॉनीटर पर उपयोग किया जाता है, तो यह वास्तव में खराब लगता है, और यह समझ में आता है।

लेकिन देखो सिस्टम पर अन्य मॉनीटर के आधार पर बदलता है। परीक्षण लेनोवो 430 पर किया जाता है जिसमें 4k मॉनिटर डिस्प्ले पोर्ट के माध्यम से जुड़ा होता है। लैपटॉप मॉनिटर पर संकल्प 1920/1080 है और 4k मॉनिटर पर इसकी 3840/2160 है। प्रदर्शन स्केलिंग हमेशा 200% है।

4k मॉनिटर पर निम्नलिखित सभी स्क्रीन शॉट्स लिया गया था। दोनों पर नजर रखने के सक्रिय साथ

  1. एक परीक्षण
  2. दूसरी स्क्रीन के साथ एक परीक्षण केवल
  3. नोटबुक की निगरानी के साथ एक परीक्षण बंद कर दिया (जो प्रणाली के लिए केवल एक मॉनिटर उपलब्ध मतलब है)

enter image description here enter image description here enter image description here

मुझे पता है कि हमारी आवेदती परिवर्तन के बिना 4k पर अच्छा नहीं लगेगा और dpiAware/dpiAwareness सेट करेगा।

लेकिन मेरा प्रश्न है: एप्लिकेशन केवल मॉनीटर सक्रिय होने पर निर्भर करता है क्यों? और क्या यह नियंत्रित करने का कोई तरीका है कि किस तरह का "प्रकार" देखा जाता है?

+2

मुझे जो पता है उसके आधार पर, ऐसा होने का कारण यह है कि आप अपने Winforms के लेआउट गुणों को कैसे सेट करते हैं। उदाहरण के लिए यदि 'ऑटोसाइज' को 'ट्रू' पर सेट किया गया था, तो मॉनीटर रिज़ॉल्यूशन में प्रत्येक बदलाव फॉर्म आकार को प्रभावित करेगा। वही एंकर 'और' डॉक 'के साथ चला जाता है, यही कारण है कि अधिकांश लोग Winforms पर WPF पसंद करते हैं। 3840/2160 से 1920/1080 मॉनीटर तक, इस गुण को सही ढंग से सेट किए बिना, आपको एक "सार" (यहां एक चित्रकार मजाक बनाने की कोशिश) Winform मिलता है। –

उत्तर

2

हो सकता है कि आप इस के बारे में पता कर रहे हैं, लेकिन यह पहले उल्लेख नहीं किया गया था:

इसमें 3 हैं आवेदन पत्र के प्रकार:

  • बारे में पता
  • सिस्टम डीपीआई Awa डीपीआई नहीं फिर
  • प्रति मॉनिटर डीपीआई बारे में पता

यहाँ विवरण: https://msdn.microsoft.com/de-de/library/windows/desktop/dn469266(v=vs.85).aspx

आप app.config में आपके आवेदन पर डीपीआई जागरूकता सेट कर सकते हैं:

<appSettings> 
    <add key="EnableWindowsFormsHighDpiAutoResizing" value="false" /> 
</appSettings> 

और app.manifest:

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

जब आप एक डीपीआई> = 150% स्केलिंग अतिरिक्त रूप से आरएमबी के माध्यम से नियंत्रित किया जा सकता है -> गुण -> संगतता -> उच्च डीपीआई

विंडोज के लिए डिफ़ॉल्ट रूप से डीपीआई-स्केलिंग उच्च डीपीआई के लिए अक्षम करता है। तो सबकुछ बॉक्स से बाहर काम करता है।शायद इस सेटिंग्स में से एक डिफ़ॉल्ट पर नहीं है? विशेष रूप से exe पर आरएमबी गुणों में विन्यास?

3

माइक्रोसॉफ्ट इस समस्या से अवगत है और नेट 4.7 फ्रेमवर्क के साथ यह तय हो:

https://blogs.msdn.microsoft.com/dotnet/2017/04/05/announcing-the-net-framework-4-7/

+0

4.7 रिलीज नोट्स से: "इस रिलीज में विंडोज फॉर्म डीपीआई जागरूकता अनुप्रयोगों के लिए उच्च डीपीआई सुधारों का एक बड़ा सेट शामिल है"। लेकिन मेरा उदाहरण डीपीआई जागरूक नहीं है। यह सेकंड स्क्रीन के आधार पर बस अलग दिखता है। मैं वैसे भी इसे 4.7 के साथ परीक्षण करूंगा। – Manuel

+0

मुझे लगता है कि रिलीज नोट्स में सबसे महत्वपूर्ण वाक्य यह है कि विंडोज फॉर्म रास्टर ग्राफिक्स पर आधारित हैं, मैं व्यक्तिगत रूप से सोचता हूं कि आपके मामले में 200% की स्केलिंग भारी भूमिका निभा रही है कि एप्लिकेशन विभिन्न मॉनीटरों में क्यों बदलता है। लेकिन यह अभी भी एक अनुमान है। – Kris

संबंधित मुद्दे