Moja aplikacja .NET (VB.NET 3.5, jeśli naprawdę musisz wiedzieć) formularze nie są poprawnie formatowane, gdy są renderowane przy ustawieniach wysokich DPI. Wszystkie poprawki, które do tej pory znalazłem, wyjaśniają przyczynę problemu, ponieważ "niektóre elementy interfejsu użytkownika nie są skalowane poprawnie". Zastanawiałem się, czy ktoś miał bardziej znaczące wyjaśnienie? Dzięki!Dlaczego. Winformy .NET skalują się nieprawidłowo przy dużych ustawieniach DPI?
Odpowiedz
Zasadniczo problem polega na tym, że GDI + (i przez rozszerzenie, Windows Forms) używa pikseli urządzenia jako domyślnej jednostki miary. Po zmianie ustawienia DPI fizyczny rozmiar piksela nie zmienia się (piksel to piksel), ale czcionki i obrazy mierzone w rozmiarach innych niż piksele są odpowiednio skalowane. Windows Forms stara się dopasować to najlepiej, jak to tylko możliwe, tworząc więcej miejsca na układ, ale jedynym prawdziwym rozwiązaniem jest użycie systemu pomiarowego nie opartego na pikselach. Właśnie to robi WPF.
W trybie WPF, w rozdzielczości 96 DPI piksel niezależny od urządzenia odpowiada rozmiarowi fizycznemu piksela. Ale po zmianie DPI systemu, WPF skaluje wirtualny układ współrzędnych na całym świecie. Aplikacja, kontrolki itp. Nie mają pojęcia, że nie są już ustawione na fizyczne piksele. W rzeczywistości może to czasami powodować problemy z aliasingiem w WPF, ale nigdy nie musisz się martwić, że układ aplikacji jest inny w różnych ustawieniach DPI.
Jedną z rzeczy, które możesz zrobić, aby zminimalizować problem w Windows Forms, jest użycie "nowych" (jak w .NET 2.0) paneli układu, takich jak TableLayoutPanel, FlowLayoutPanel itp. Użyj zakotwiczenia, Docku i AutoSize, gdy tylko jest to możliwe. Umożliwi to Windows Forms ponowne przeprojektowanie Twojego interfejsu, najlepiej jak tylko możliwe.
Należy również pamiętać, że w przypadku tworzenia formularzy o niestandardowych DPI, Windows Forms użyje go jako "podstawowego" rozmiaru. To prawie zawsze powoduje problemy. Więc spróbuj użyć 96 DPI do zaprojektowania swoich formularzy.
- 1. Problemy z poprawnym skalowaniem WinForm do DPI
- 2. Winformy: pobieranie numeru wersji publikacji?
- 3. Eksportowanie zadań do 'C przy użyciu DPI
- 4. W jaki sposób selektory JMS skalują się z głębokością kolejki?
- 5. Dlaczego kompilator F # czasami nieprawidłowo generalizuje funkcje?
- 6. Sterowanie DPI obrazu wyjściowego przy użyciu renderowania()
- 7. Dlaczego Python nieprawidłowo ocenia to wyrażenie?
- 8. Wtyczka jQuery jawi się nieprawidłowo na chrome
- 9. Obrazy w UITableViewCells ładują się nieprawidłowo
- 10. Połącz się z AS400 przy użyciu .NET
- 11. Formatowanie dużych liczb za pomocą .NET
- 12. Wyłącz ustawienie DefaultSettingValueAttribute Utwórz na ustawieniach aplikacji .Net Application
- 13. Sortable zachowuje się nieprawidłowo po zastosowaniu skali CSS
- 14. Dowiedz się, rozmiar obiektu .net
- 15. WiX nieprawidłowo renderuje obrazy
- 16. getheight() px lub dpi?
- 17. Ustawianie DPI dla plików PNG
- 18. Przetwarzanie dużych zestawów danych przy użyciu LINQ
- 19. Primefaces DataTable nieprawidłowo sortuje
- 20. main: ZooKeeperServerMain @ 54 - Nieprawidłowe argumenty, nieprawidłowo kończące się
- 21. yticklabels tylko przy dużych kleszczach matplotlib
- 22. czyszczenie dużych danych przy użyciu python
- 23. Kopiowanie dużych plików przy użyciu pulpitu zdalnego
- 24. ajax cakephp działa nieprawidłowo
- 25. WebDriverError: nieznany błąd: nie udało się uruchomić Chrome: zakończono nieprawidłowo
- 26. Sowa Karuzela - szerokość jest obliczana nieprawidłowo
- 27. Ekran powitalny zmienia rozmiar nieprawidłowo
- 28. Czy istnieje biblioteka .NET do formatowania dużych liczb jako tekst?
- 29. Dlaczego zachowanie BeforeFieldInit zmieniło się w .NET 4?
- 30. Dlaczego moja aplikacja .Net kontaktuje się z Verisign?