估计很多人在做自定义控件开发的时候都需要用到这样的判断,处于设计模式中时控件不执行一些数据加载方法,或者与运行时外观有所不同。
以下是我现在正在用的一个类,至今没发现什么问题:
/// <summary>
/// SkinCat
/// </summary>
internal class SkinCat : System.ComponentModel.Component
{
/// <summary>
/// 是否处于设计器模式
/// </summary>
private bool isDesignMode = false;
/// <summary>
/// 唯一实例
/// </summary>
private static SkinCat instance = null;
/// <summary>
/// 创建一个新的SkinCat对象
/// </summary>
private SkinCat()
{
}
/// <summary>
/// 获取SkinCat唯一对象
/// </summary>
internal static SkinCat Instance
{
get
{
if (instance == null)
{
instance = new SkinCat();
instance.isDesignMode = instance.GetIsDesignMode();
}
return instance;
}
}
/// <summary>
/// 获取是否处于设计器模式
/// </summary>
internal bool IsDesignMode
{
get
{
return isDesignMode;
}
}
/// <summary>
/// 获取当前是否处于设计器模式
/// </summary>
/// <remarks>
/// 在程序初始化时获取一次比较准确,若需要时获取可能由于布局嵌套导致获取不正确,如GridControl-GridView组合。
/// </remarks>
/// <returns>是否为设计器模式</returns>
private bool GetIsDesignMode()
{
return (this.GetService(typeof(System.ComponentModel.Design.IDesignerHost)) != null
|| LicenseManager.UsageMode == LicenseUsageMode.Designtime);
}
}
本文介绍了在C#自定义控件开发中如何判断控件是否处于设计模式,以避免在设计时执行不必要的数据加载操作或改变控件在运行时的外观。提供了一个稳定可靠的IsDesignMode类示例。

2211

被折叠的 条评论
为什么被折叠?



