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

C#自定义用户控件仅设计时调试信息显示问题求助

解决UserControl设计时调试信息不显示的问题

问题原因

你的代码存在两个关键问题:

  1. 构造函数中过早缓存LicenseManager.UsageMode:控件在设计环境中加载时,构造函数阶段的UsageMode可能还未正确初始化,尤其是嵌套到其他用户控件时,会错误返回Runtime。
  2. 嵌套控件的DesignMode判断失效:直接使用LicenseManager.UsageMode或DesignMode属性,在嵌套场景下无法准确识别设计模式。

修复后的代码

替换原有的OnPaint方法逻辑,使用更可靠的设计模式判断方式:

protected override void OnPaint(PaintEventArgs e)
{
    base.OnPaint(e);

    // 实时判断是否处于设计模式(嵌套场景也能正确识别)
    bool isInDesignMode = System.ComponentModel.DesignerProperties.GetIsInDesignMode(this);

    if (isInDesignMode)
    {
        // 显示设计时专属调试信息
        e.Graphics.DrawString("设计模式调试: test", Font, Brushes.Red, 5, 5);
        // 可选:显示当前LicenseMode用于调试
        e.Graphics.DrawString($"LicenseMode: {LicenseManager.UsageMode}", Font, Brushes.Blue, 5, 25);
    }
}

关键说明

  • DesignerProperties.GetIsInDesignMode(this):这是.NET提供的最可靠的设计模式判断方法,会自动处理嵌套控件、设计器进程识别等场景,比直接使用DesignMode或LicenseManager.UsageMode更准确。
  • 避免在构造函数缓存状态:设计模式的状态可能在控件加载过程中发生变化,必须在需要使用时(比如OnPaint)实时判断,而不是在构造函数中提前缓存。
  • 额外排查点:如果仍然不生效,检查是否在设计器中禁用了控件的绘制优化,或者确保base.OnPaint(e)的调用顺序正确(自定义绘制逻辑不依赖基类绘制的覆盖即可)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 14:20:12