如何知道控件是否在设计时?

时间:2011-11-16 06:59:39

标签: c# .net design-time

我有一个类(控件),实现了ICustomTypeDescriptor,它在设计时和PropertyGrid的运行时都用于自定义。我需要在设计时公开不同的属性(标准控件属性,如widthheight等),并在运行时,在我的程序中使用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#中的设计时标志是否有模拟?使用条件编译可能更好吗?

3 个答案:

答案 0 :(得分:11)

检查DesignMode是真还是假。它是属于控件基类的属性。

答案 1 :(得分:8)

标志应为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 doc

答案 2 :(得分:3)

使用基础的DesignMode属性。这将告诉您有关模式的信息。