Windows用户表单自定义可浏览属性

时间:2016-04-19 10:25:46

标签: c# winforms properties attributes windows-forms-designer

我想为设计时可浏览的窗体创建一个自定义属性,但我的努力都没有成功。显而易见的解决方案似乎是将browsable属性设置为true:

[Browsable(true),
EditorBrowsable(EditorBrowsableState.Always),
Description("Custom Border Colour"),
Category("Custom")]
public Color BorderColour
{
    get
    {
        return bCol;
    }
    set
    {
        bCol = value;
    }
}

但这不起作用。我已经为自定义控件做了很多次,它就像一个魅力,事实上,我甚至不需要添加属性,因为默认是真的。这篇codeproject文章似乎做了我想要的,这就是我上面所描述的。 MSDN也是一个死胡同,或者我不知道要搜索什么。

我尝试将代码添加到Form1.csFrom1.Designer.cs,但无效。

我是否遗漏了一些东西,比如我需要为表格设置的某些属性才允许这样做,还是只是不可能?

我正在使用Visual Studio Express 2013,如果这会以任何方式影响结果。

编辑:在Reza回答之后尝试:根据Reza的建议,在this question中询问有关此主题的更详细问题。

1 个答案:

答案 0 :(得分:6)

简短回答

您应该将属性添加到表单的基类,然后在打开子表单时可以在设计器中看到它:

public class Form1 : BaseForm
{
    public Form1()
    {
        InitializeComponent();
    }
}
public class BaseForm : Form
{
    //The property is not visible in designer of BaseForm
    //But you can see it in designer of Form1

    public string SomeProperty {get;set;}
}

此行为背后的原因

原因在于设计师的工作方式。当设计者在设计时显示表单时,实际上它会创建表单基类的实例并显示其属性。因此,在设计器中使用public class Form1:Form,您在设计器中看到的实际上是Form类的实例,以及使用{{1} InitializeComponent方法设置属性值的控件实例还使用Form1 InitializeComponent方法添加的控件。

同样对于用户控件,您无法在用户控件的设计器中看到自定义属性,因为您可以在用户控件的设计器中看到的属性是其基类的属性。但是当您在表单上放置用户控件的实例时,您将看到该实例的属性,这些属性是Form1的属性。

设计器的根元素的属性是根元素的基类的属性。但这些值正是UserControl1中设置的值。

要查找更多信息并查看有关设计师工作原理的有趣示例,您可以查看此postthis one