簡體   English   中英

.NET WinForms 高 DPI 縮放 - 如何在顯示設置更改后強制 forms 正確顯示?

[英].NET WinForms high DPI Scaling - how to force forms to display correctly after display settings change?

我有一個內置於 .NET Core 3.1 的 WinForms 應用程序,在高 DPI 顯示器上運行良好。 我的問題是,每當在 Windows 中添加或刪除新顯示器時,forms 就會再次獲得模糊的外觀。 重新啟動應用程序可以解決此問題,但我想在發生這種情況時適當地重新繪制 forms。

我想我已經找到了要訂閱的適當系統事件,但我無法讓 forms 正確重繪/重繪自己。

訂閱 Windows 事件 DisplaySettingsChanged 如下:

using Microsoft.Win32;
(...)
SystemEvents.DisplaySettingsChanged += new EventHandler(UpdateDpiOnOpenForms);

然后添加我無法工作的事件處理程序方法:

public static void UpdateDpiOnOpenForms(object sender, EventArgs e)
{
    foreach (Form f in Application.OpenForms) 
    { 
        //What would the correct command be here?
    }
}

如何像應用程序啟動后一樣,使用新的默認高 DPI 設置強制所有打開的 forms 重繪/重繪?

使用 Control.Invalidate() 方法。

"使控件的指定區域無效(將其添加到控件的更新區域,這是將在下一次繪制操作中重新繪制的區域),並導致將繪制消息發送到控件。可選地,使子控件無效分配給控制。”

https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.control.invalidate?view=net-5.0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM