Oprava problémů s HDPI nebo škálováním v návrháři model Windows Forms v sadě Visual Studio

V tomto článku se dozvíte, jak řešit problémy s vykreslováním kvůli omezením škálování návrháře model Windows Forms na monitorech HDPI spuštěním sady Visual Studio jako procesu bez rozlišení DPI. HDPI je zkratka pro vysoké body na paleč, přičemž každá tečka představuje pixel fyzického zařízení.

Vyšší hustota pixelů vytváří ostřejší obrázky a správně zobrazují prvky velikosti měřítka. Bez správného škálování jsou prvky uživatelského rozhraní a text příliš malé, aby se efektivně používaly a můžou se překrývat. Systém Windows automaticky škáluje percentil uživatelského rozhraní tak, aby odpovídal nastavení DPI. Například nastavení DPI 100 % představuje 96 DPI a 125 % je 120 DPI. Monitory používané k odeslání s 96 pixely na paleč, které systém Windows použil jako směrný plán pro 100% rastrový obrázek výkresu. Jak ale technologie zobrazení pokročila, monitory se nyní dodávají s panely o rozlišení 300 DPI nebo vyšší.

Když aplikace deklaruje, že je pracující s DPI, jedná se o příkaz, který určuje, že se aplikace chová dobře při vyšším nastavení DPI, a systém Windows může použít automatické škálování. Aplikace bez rozlišení DPI se naopak vykreslují s pevnou hodnotou DPI 96 pixelů na palec nebo 100 %, takže automatické škálování se nepoužije.

Model Windows Forms Designer nemá možnost dpi

Poznámka:

V sadě Visual Studio 2022 verze 17.8 nebo novější se můžete vyhnout problémům popsaným v tomto článku. Visual Studio 2022 verze 17.8 poskytuje podporu karet bez rozlišení DPI v aplikaci podporující DPI. Podívejte se na vylepšení dpi sady Visual Studio. Díky tomu můžete navrhovat model Windows Forms pro kontexty bez rozlišení DPI bez nutnosti spouštět Visual Studio v režimu dpi. Pokud chcete toto nastavení použít v projektu model Windows Forms, nastavte vlastnost ForceDesignerDPIUnaware do true souboru projektu:

<PropertyGroup>
  ...
  <ForceDesignerDPIUnaware>true</ForceDesignerDPIUnaware>
</PropertyGroup>

Visual Studio je ve výchozím nastavení tečkami na palec (DPI), což znamená, že se zobrazení škáluje automaticky. Návrhář model Windows Forms je však aplikace bez rozlišení DPI, takže se zobrazí jako rastrový obrázek v rozlišení 96 DPI. Bez podpory automatického škálování vznikají problémy a překrývání při otevírání formulářů na monitorech HDPI, například na tomto obrázku:

Screenshot of Windows Forms Designer on HDPI monitor that shows issues due to lack of autoscaling support.

Když otevřete formulář v návrháři model Windows Forms na monitoru HDPI, visual Studio zobrazí informační panel, který zobrazuje aktuální procento měřítka monitoru (například 150%/144 DPI), možnost restartovat Visual Studio při 100% škálování tak, aby odpovídalo model Windows Forms Návrháři, a další informace. Restartováním při 100% škálování se VS DPI neznají, což umožňuje správné vykreslování bez překrývání.

Screenshot of the information bar in Visual Studio to restart in DPI-unaware mode.

Tip

  1. Pokud jste informační panel zavřeli a chcete sadu Visual Studio restartovat jako dpi, použijte nástroj DevEnv.exe.
  2. Pokud v návrháři nefungujete, můžete informační panel ignorovat. Oznámení můžete také zakázat , aby se informační panel dál nezojevil.

Restartování sady Visual Studio jako procesu bez rozlišení DPI

Doporučeným řešením těchto problémů s uživatelským rozhraním je restartování sady Visual Studio jako procesu bez rozlišení DPI, což znamená, že se restartuje při 100% škálování (96 DPI).

Přepnutí na DPI bez vědomí:

  • Na žlutém informačním panelu, který se zobrazí při otevření formuláře v návrháři model Windows Forms, vyberte možnost Restartovat sadu Visual Studio se škálováním o velikosti 100 %.

Po dokončení práce v návrháři model Windows Forms je důležité ho restartovat a vrátit ho do výchozího nastavení jako proces pracující s DPI.

Pokud se chcete vrátit do rozlišení DPI, mějte na paměti:

  • Zavřete a znovu otevřete Visual Studio, abyste se znovu vrátili do rozlišení DPI. Případně na informačním panelu vyberte možnost Restartovat Visual Studio jako proces pracující s DPI.

Když sada Visual Studio běží jako DPI, vyřeší se problémy s rozložením návrháře, ale písma se můžou objevit rozmazaně a problémy se můžou objevit v jiných návrhářích, jako je Návrhář XAML. Visual Studio zobrazí jinou informační zprávu, když DPI neví, že visual studio běží jako proces bez rozlišení DPI. Návrháři WPF a XAML se nemusí správně zobrazovat."

Poznámka:

  • Pokud máte po výběru možnosti restartovat Sadu Visual Studio jako proces bez rozlišení DPI, může se změnit pozice oken nástrojů.
  • Pokud použijete výchozí profil jazyka Visual Basic nebo pokud máte možnost Uložit nové projekty při zrušení výběru možnosti v >nástrojích Možnosti>projektů a řešení, Visual Studio nemůže znovu otevřít váš projekt při restartování jako proces bez rozlišení DPI. Projekt ale můžete otevřít tak, že ho vyberete v části Soubor>poslední projekty a řešení.

Poznámka:

  • Pokud po výběru možnosti restartování sady Visual Studio jako procesu bez rozlišení DPI odpojíte okna nástrojů, může se změnit pozice oken nástrojů.
  • Výchozí profil jazyka Visual Basic se při restartování sady Visual Studio nerestartuje jako proces bez rozlišení DPI. Místo toho přejděte k projektu prostřednictvím >posledních projektů a řešení souborů.

Nastavení měřítka zobrazení na 100 % pomocí Windows

Pokud se chcete vyhnout použití sady Visual Studio k přepnutí měřítka zobrazení, upravte měřítko v nastavení windows. Například ve Windows 11 můžete nastavit škálování na 100 % (96 DPI).

Uděláte to tak, že do vyhledávacího pole na hlavním panelu zadáte nastavení zobrazení a pak vyberete Změnit nastavení zobrazení. V okně Nastavení nastavte velikost textu, aplikací a dalších položek na 100 %. Mějte na paměti, že 100% škálování (96 DPI) může být uživatelské rozhraní pro praktické použití příliš malé.

Zakázání škálování pomocí nástroje příkazového řádku DevEnv

Pokud chcete spravovat nastavení zobrazení pomocí nástrojů příkazového řádku místo nástrojů uživatelského rozhraní (uživatelského rozhraní), použijte DevEnv.exe. Příkaz devenv.exe přebírá /noscale jako parametr příkazového řádku, který se spustí v 100% režimu škálování. Zde je postup jeho použití:

  1. Na řádku nabídek sady Visual Studio vyberte Příkazový řádek příkazového řádku>Nástroje>pro vývojáře.
  2. Pak zadejte devenv /noScale.

Další možnosti

Kromě výše uvedených možností můžete také vyzkoušet následující možnosti:

Odstraňování potíží

Pokud přechod dpi nefunguje v sadě Visual Studio, ujistěte se, že dpiAwareness hodnota není v HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\systém Windows NT\CurrentVersion\Image File Execution Options\devenv.exe v Editoru registru. Odstraňte hodnotu, pokud je k dispozici.