Dukungan DPI tinggi dalam Formulir Windows

Dimulai dengan .NET Framework 4.7, Windows Forms mencakup penyempurnaan untuk DPI tinggi umum dan skenario DPI dinamis. Ini termasuk:

  • Penyempurnaan dalam penskalaan dan tata letak sejumlah kontrol Windows Forms, seperti MonthCalendar kontrol dan CheckedListBox kontrol.

  • Penskalaan sekali jalan. Dalam .NET Framework 4.6 dan versi yang lebih lama, penskalakan dilakukan melalui beberapa pass, yang menyebabkan beberapa kontrol diskalakan lebih dari yang diperlukan.

  • Dukungan untuk skenario DPI dinamis di mana pengguna mengubah DPI atau faktor skala setelah aplikasi Windows Forms diluncurkan.

Dalam versi .NET Framework yang dimulai dengan .NET Framework 4.7, fitur dukungan DPI tinggi yang ditingkatkan adalah fitur yang membutuhkan pemberian izin. Anda harus mengonfigurasi aplikasi Anda untuk memanfaatkannya.

Mengonfigurasi aplikasi Windows Forms Anda untuk dukungan DPI tinggi

Penting

Informasi ini hanya berlaku untuk .NET Framework. Untuk mengaktifkan dukungan DPI tinggi di .NET, lihat Pengaturan aplikasi tingkat proyek.

Fitur Windows Forms baru yang mendukung kesadaran DPI tinggi hanya tersedia dalam aplikasi yang menargetkan .NET Framework 4.7 dan berjalan pada sistem operasi Windows yang dimulai dengan Pembaruan Pembuat Windows 10.

Selain itu, untuk mengonfigurasi dukungan DPI tinggi di aplikasi Windows Forms, Anda harus melakukan hal berikut:

  • Deklarasikan kompatibilitas dengan Windows 10.

    Untuk melakukan ini, tambahkan yang berikut ini ke file manifes Anda:

    <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
      <application>
        <!-- Windows 10 compatibility -->
        <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />
      </application>
    </compatibility>
    
  • Aktifkan kesadaran DPI per monitor dalam file app.config .

    Windows Forms memperkenalkan elemen baru <System.Windows.Forms.ApplicationConfigurationSection> untuk mendukung fitur dan kustomisasi baru yang ditambahkan dimulai dengan .NET Framework 4.7. Untuk memanfaatkan fitur baru yang mendukung DPI tinggi, tambahkan yang berikut ini ke file konfigurasi aplikasi Anda.

    <configuration>
      <!-- ... other xml settings ... -->
    
      <System.Windows.Forms.ApplicationConfigurationSection>
        <add key="DpiAwareness" value="PerMonitorV2" />
      </System.Windows.Forms.ApplicationConfigurationSection>
    
    </configuration>
    

    Penting

    Di versi .NET Framework sebelumnya, Anda menggunakan manifes untuk menambahkan dukungan DPI tinggi. Pendekatan ini tidak lagi direkomendasikan, karena mengesampingkan pengaturan yang ditentukan pada file app.config.

  • Panggil metode statis EnableVisualStyles .

    Ini harus menjadi panggilan metode pertama di titik masuk aplikasi Anda. Contohnya:

    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new Form2());
    }
    

Memilih keluar dari fitur DPI tinggi individu

Penting

Informasi ini hanya berlaku untuk .NET Framework. Untuk mengaktifkan dukungan DPI tinggi di .NET, lihat Pengaturan aplikasi tingkat proyek.

DpiAwareness Mengatur nilai untuk PerMonitorV2 memungkinkan semua fitur kesadaran DPI tinggi yang didukung oleh versi .NET Framework yang dimulai dengan .NET Framework 4.7. Biasanya, ini memadai untuk sebagian besar aplikasi Windows Forms. Namun, Anda mungkin ingin memilih keluar dari satu atau beberapa fitur individual. Alasan terpenting untuk melakukan ini adalah bahwa kode aplikasi Anda yang ada sudah menangani fitur tersebut. Misalnya, jika aplikasi Anda menangani penskalaan otomatis, Anda mungkin ingin menonaktifkan fitur mengubah ukuran otomatis sebagai berikut:

<configuration>
  <!-- ... other xml settings ... -->

  <System.Windows.Forms.ApplicationConfigurationSection>
    <add key="DpiAwareness" value="PerMonitorV2" />
    <add key="EnableWindowsFormsHighDpiAutoResizing" value="false" />
  </System.Windows.Forms.ApplicationConfigurationSection>

</configuration>

Untuk daftar kunci individual dan nilainya, lihat Windows Forms Add Configuration Element.

Peristiwa perubahan DPI baru

Dimulai dengan .NET Framework 4.7, tiga peristiwa baru memungkinkan Anda menangani perubahan DPI dinamis secara terprogram:

  • DpiChangedAfterParent, yang diaktifkan ketika pengaturan DPI untuk kontrol diubah secara programatis setelah terjadinya peristiwa perubahan DPI pada kontrol atau formulir induknya.
  • DpiChangedBeforeParent, yang diaktifkan ketika pengaturan DPI untuk kontrol diubah secara terprogram sebelum peristiwa perubahan DPI untuk kontrol atau formulir induknya telah terjadi.
  • DpiChanged, yang diaktifkan ketika pengaturan DPI berubah pada perangkat tampilan tempat formulir saat ini ditampilkan.

Metode dan properti bantu baru

.NET Framework 4.7 juga menambahkan sejumlah metode dan properti pembantu baru yang menyediakan informasi tentang penskalaan DPI dan memungkinkan Anda melakukan penskalaan DPI. Ini termasuk:

Pertimbangan penerapan versi

Selain berjalan pada Pembaruan Pembuat .NET Framework 4.7 dan Windows 10, aplikasi Anda juga dapat berjalan di lingkungan di mana aplikasi tersebut tidak kompatibel dengan peningkatan DPI yang tinggi. Dalam hal ini, Anda perlu mengembangkan cadangan untuk aplikasi Anda. Anda dapat melakukan ini untuk melakukan gambar kustom untuk menangani penskalakan.

Untuk melakukan ini, Anda juga perlu menentukan sistem operasi tempat aplikasi Anda berjalan. Anda dapat melakukannya dengan kode seperti berikut:

// Create a reference to the OS version of Windows 10 Creators Update.
Version OsMinVersion = new Version(10, 0, 15063, 0);

// Access the platform/version of the current OS.
Console.WriteLine(Environment.OSVersion.Platform.ToString());
Console.WriteLine(Environment.OSVersion.VersionString);

// Compare the current version to the minimum required version.
Console.WriteLine(Environment.OSVersion.Version.CompareTo(OsMinVersion));

Perhatikan bahwa aplikasi Anda tidak akan berhasil mendeteksi Windows 10 jika tidak terdaftar sebagai sistem operasi yang didukung dalam manifes aplikasi.

Anda juga dapat memeriksa versi .NET Framework yang digunakan untuk membangun aplikasi.

Console.WriteLine(AppDomain.CurrentDomain.SetupInformation.TargetFrameworkName);

Lihat juga