Quando eseguo un’applicazione Windows Form in Windows 10, la grafica all’interno della finestra sembra distorta:
In fase di progettazione ciò non accade:
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:
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 .
È 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 chiamandoSetProcessDPIAware
.
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 inveceSetProcessDpiAwareness
.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).