Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Automatyczne skalowanie umożliwia wyświetlanie formularza i jego kontrolek, zaprojektowanych na jednej maszynie z określoną rozdzielczością lub czcionką wyświetlania, odpowiednio wyświetlane na innej maszynie z inną rozdzielczością lub czcionką ekranu. Zapewnia, że formularz i jego kontrolki będą inteligentnie zmieniane, aby były spójne z natywnymi oknami i innymi aplikacjami zarówno na komputerach użytkowników, jak i innych deweloperów. Automatyczne skalowanie i style wizualne umożliwiają aplikacjom Windows Forms zachowanie spójnego wyglądu i działania w porównaniu z natywnymi aplikacjami systemu Windows na maszynie każdego użytkownika.
W większości przypadków automatyczne skalowanie działa zgodnie z oczekiwaniami w formularzach Windows Forms. Jednak zmiany schematu czcionek mogą być problematyczne. Aby zapoznać się z przykładem rozwiązania tego problemu, zobacz Jak: Odpowiadać na zmiany schematu czcionek w aplikacji Windows Forms.
Potrzeba automatycznego skalowania
Bez automatycznego skalowania aplikacja przeznaczona dla jednej rozdzielczości ekranu lub czcionki będzie wyświetlana za mała lub zbyt duża po zmianie rozdzielczości lub czcionki. Jeśli na przykład aplikacja została zaprojektowana przy użyciu 9 punktów Tahoma jako punktu odniesienia, bez korekty będzie ona wydawać się zbyt mała, jeśli zostanie uruchomiona na maszynie, na której czcionka systemowa to Tahoma 12 punktów. Elementy tekstowe, takie jak tytuły, menu, zawartość pola tekstowego itd., będą renderowane mniejsze niż inne aplikacje. Ponadto rozmiar elementów interfejsu użytkownika zawierających tekst, takich jak pasek tytułu, menu i wiele kontrolek, zależy od używanej czcionki. W tym przykładzie te elementy będą się również wydawały relatywnie mniejsze.
Analogiczna sytuacja występuje, gdy aplikacja jest przeznaczona do określonej rozdzielczości ekranu. Najczęstszą rozdzielczością wyświetlania jest 96 kropek na cal (DPI), co odpowiada skalowaniu wyświetlacza 100%%, ale coraz bardziej powszechne stają się wyświetlacze o wyższej rozdzielczości obsługujące 125%%, 150%%, 200%% (które odpowiadają odpowiednio 120, 144 i 192 DPI) i więcej. Bez dostosowania aplikacja, zwłaszcza oparta na grafice, zaprojektowana pod kątem jednej rozdzielczości będzie wydawać się zbyt duża lub zbyt mała po uruchomieniu w innej rozdzielczości.
Automatyczne skalowanie ma na celu rozwiązanie tych problemów przez automatyczne zmienianie rozmiaru formularza i kontrolek podrzędnych zgodnie z względnym rozmiarem czcionki lub rozdzielczością wyświetlania. System operacyjny Windows obsługuje automatyczne skalowanie okien dialogowych przy użyciu względnej jednostki miary nazywanej jednostkami okien dialogowych. Jednostka okna dialogowego jest oparta na czcionki systemowej, a jej relację z pikselami można określić za pomocą funkcji GetDialogBaseUnitszestawu SDK Win32 . Gdy użytkownik zmieni motyw używany przez system Windows, wszystkie okna dialogowe zostaną odpowiednio dostosowane. Ponadto funkcja Windows Forms obsługuje automatyczne skalowanie zgodnie z domyślną czcionką systemu lub rozdzielczością wyświetlania. Opcjonalnie automatyczne skalowanie można wyłączyć w aplikacji.
Ostrzeżenie
Dowolne kombinacje trybów DPI i skalowania czcionek nie są obsługiwane. Mimo że kontrolkę użytkownika można skalować przy użyciu jednego trybu (na przykład DPI) i umieścić go w formularzu przy użyciu innego trybu (czcionki) bez problemów, ale mieszanie formularza podstawowego w jednym trybie i postaci pochodnej w innym może prowadzić do nieoczekiwanych wyników.
Automatyczne skalowanie w działaniu
Formularze systemu Windows używają następującej logiki do automatycznego skalowania formularzy i ich zawartości:
Podczas projektowania każda ContainerControl zapisuje tryb skalowania i bieżącą rozdzielczość odpowiednio w AutoScaleMode oraz AutoScaleDimensions.
W czasie wykonywania rzeczywista rozdzielczość jest przechowywana we właściwości CurrentAutoScaleDimensions. Właściwość AutoScaleFactor dynamicznie oblicza stosunek między rozdzielczością skalowania w czasie wykonywania programu a rozdzielczością w czasie projektowania.
Gdy formularz się załaduje, jeśli wartości CurrentAutoScaleDimensions i AutoScaleDimensions są różne, metoda PerformAutoScale jest wywoływana w celu skalowania kontrolki i jej elementów podrzędnych. Ta metoda zawiesza układ i wywołuje metodę Scale w celu wykonania rzeczywistego skalowania. Następnie wartość AutoScaleDimensions jest aktualizowana w celu uniknięcia progresywnego skalowania.
PerformAutoScale jest również automatycznie wywoływana w następujących sytuacjach:
W odpowiedzi na zdarzenie OnFontChanged, jeśli tryb skalowania jest Font.
Kiedy układ kontrolki kontenera zostaje wznowiony i wykryta zostanie zmiana w właściwościach AutoScaleDimensions lub AutoScaleMode.
Jak zasugerowano powyżej, gdy nadrzędny ContainerControl jest skalowany. Każda kontrolka kontenera jest odpowiedzialna za skalowanie swoich elementów podrzędnych, używając własnych czynników skalowania, a nie czynników skalowania z kontenera nadrzędnego.
Kontrolki podrzędne mogą modyfikować swój sposób skalowania na kilka sposobów.
Właściwość ScaleChildren można zastąpić, aby określić, czy ich kontrolki podrzędne powinny być skalowane, czy nie.
Metodę GetScaledBounds można przesłonić, aby dostosować zakresy, do których jest skalowana kontrola, ale nie logikę skalowania.
Metodę ScaleControl można zastąpić, aby zmienić logikę skalowania bieżącej kontrolki.
Zobacz także
.NET Desktop feedback