Problema grafico Windows Form sul sistema operativo Windows 10

Quando eseguo un’applicazione Windows Form in Windows 10, la grafica all’interno della finestra sembra distorta:

Brutta immagine

In fase di progettazione ciò non accade:

Buona immagine

Qualcuno ha mai provato questo?

(Per favore, apri le immagini per vedere meglio.)

Per risolvere il problema, puoi rendere l’applicazione DPI-Aware utilizzando una di queste opzioni:

  • Utilizzando il file manifest dell’applicazione
  • Utilizzo di SetProcessDPIAware

Utilizzando il file manifest dell’applicazione

Per rendere l’applicazione DPI-Aware, è ansible aggiungere un file manifest dell’applicazione al progetto. Quindi, nel file app.manifest , decommentare la parte correlata a DPI-Awareness:

   true   

Quindi, nel file app.config , aggiungi EnableWindowsFormsHighDpiAutoResizing impostando il suo valore su true:

    

Per ulteriori informazioni, consultare la pagina MSDN High DPI .

Utilizzo di SetProcessDPIAware

È ansible utilizzare il metodo SetProcessDPIAware() prima di mostrare il modulo principale per impostare il dpi applicativo e impedire a Windows di ridimensionare l’applicazione. Inoltre dovresti controllare che la versione di Windows sia maggiore o uguale a vista:

 static class Program { [DllImport("user32.dll", SetLastError = true)] static extern bool SetProcessDPIAware(); ///  /// The main entry point for the application. ///  [STAThread] static void Main() { if (Environment.OSVersion.Version.Major >= 6) SetProcessDPIAware(); Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(true); Application.Run(new Form1()); } } 

Nota

Mentre in precedenza utilizzavo il metodo SetProcessDPIAware per risolvere il problema, ma leggevo la nota prima dell’uso:

SetProcessDPIAware è sobject a una ansible condizione di competizione se una DLL memorizza le impostazioni dpi durante l’inizializzazione. Per questo motivo, si consiglia di impostare dpi-aware tramite il manifest dell’applicazione (.exe) piuttosto che chiamando SetProcessDPIAware .

SetProcessDPIAware è disponibile per l’uso solo nei sistemi operativi specificati nella sezione Requisiti. Questo metodo potrebbe avere un comportamento imprevisto nelle versioni successive del sistema operativo. Utilizzare invece SetProcessDpiAwareness .

Le DLL devono accettare le impostazioni dpi del processo host piuttosto che chiamare SetProcessDPIAware . Per essere impostato correttamente, dpiAware deve essere specificato come parte del manifest dell’applicazione (.exe).