如何知道控件是否处于设计时

本文关键字:何知道 控件 是否 | 更新日期: 2023-09-27 18:14:40

我有一个实现ICustomTypeDescriptor的类(控件),PropertyGrid在设计时和运行时都使用它进行定制。我需要在设计时暴露不同的属性(标准控件属性,如width, height等)和在运行时,当PropertyGrid在我的程序中使用,以改变该控件的其他属性。

我的代码是:

class MyControl : UserControl, ICustomTypeDescriptor
{
    //Some code..
    public PropertyDescriptorCollection GetProperties(Attribute[] attributes)
    {
        return GetProperties();
    }
    public PropertyDescriptorCollection GetProperties()
    {
        //I need to do something like this:
        if (designTime)
        { //Expose standart controls properties
            return TypeDescriptor.GetProperties(this, true);
        }
        else
        {
            //Forming a custom property descriptor collection
            PropertyDescriptorCollection pdc = new PropertyDescriptorCollection(null);
            //Some code..
            return pdc;
        }
    }
}
c#中是否有类似的设计时标志?使用条件编译是不是更好?

如何知道控件是否处于设计时

检查DesignMode是否为true或false。它是一个属于控件基类的属性。

标志应为DesignMode。因此,您的代码应该如下所示

public PropertyDescriptorCollection GetProperties()
{
   //I need to do something like this:
   if (this.DesignMode)
   { //Expose standart controls properties
       return TypeDescriptor.GetProperties(this, true);
   }
   else
   {   //Forming a custom property descriptor collection
       PropertyDescriptorCollection pdc = new PropertyDescriptorCollection(null);
       //Some code..
       return pdc;      
   }
}

MSDN文档

使用底座的DesignMode属性。这将告诉您模式。