You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调整窗体大小时残留虚影线条问题咨询

问题描述
  • 调整窗体大小时,会残留显示窗体旧尺寸的虚影线条
  • 双显示器环境下,该问题仅在其中一台显示器上出现
  • 此前为解决第三方控件导致的应用窗体缩放异常,在app.config中添加了以下配置;移除该配置后,虚影线条问题消失:
<System.Windows.Forms.ApplicationConfigurationSection>
    <add key="DpiAwareness" value="PerMonitorV2" />
    <add key="EnableWindowsFormsHighDpiAutoResizing" value="false" />
</System.Windows.Forms.ApplicationConfigurationSection>
问题原因

启用PerMonitorV2级别的DPI感知但关闭EnableWindowsFormsHighDpiAutoResizing时,WinForms框架不会自动处理高DPI场景下的窗体重绘适配逻辑。在双显示器DPI不一致的环境中,DPI与主显示器不同的那台设备上,窗体尺寸调整时的重绘指令无法同步更新,最终导致旧尺寸的虚影残留。

解决思路
  • 强制触发完整重绘:在窗体的Resize事件中添加代码,强制覆盖旧绘制缓存:
    private void Form_Resize(object sender, EventArgs e)
    {
        this.Invalidate(true); // 标记整个窗体需要重绘
        this.Update(); // 立即执行重绘操作
    }
    
  • 调整DPI配置并单独处理第三方控件:如果必须保留PerMonitorV2配置,尝试开启EnableWindowsFormsHighDpiAutoResizing,同时针对第三方控件单独适配:
    • 给第三方控件设置AutoScaleMode = AutoScaleMode.None,关闭其自动缩放
    • 在第三方控件的DpiChanged事件中手动调整控件的尺寸、字体等元素,适配当前显示器DPI
  • 适配双显示器DPI变化:在窗体的DpiChanged事件中重新计算布局,确保跨显示器切换或调整时重绘正常:
    protected override void OnDpiChanged(DpiChangedEventArgs e)
    {
        base.OnDpiChanged(e);
        this.PerformLayout(); // 强制重新布局所有控件
    }
    

内容的提问来源于stack exchange,提问作者user3786542

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 11:06:02