c# - 设计时 Form 的自定义可浏览属性

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

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

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

但这行不通。我已经为自定义控件做了很多次,它就像一个魅力,事实上,我什至不需要添加属性,因为默认值为 true。这codeproject文章似乎做了我想要的,这就是我上面描述的。 MSDN也是死路一条,还是不知道该搜什么。

我尝试将代码添加到 Form1.csFrom1.Designer.cs 但没有任何效果。

我是否遗漏了什么,比如我需要为表单设置一些属性以允许这样做,还是根本不可能?

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


编辑:Reza 回答后的尝试: this question 中提出了关于此主题的更详细问题。根据 Reza 的建议。

最佳答案

简答

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

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 类的实例和已使用 using 设置属性值的控件实例Form1InitializeComponent 方法以及使用Form1InitializeComponent 方法添加的控件。

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

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

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

关于c# - 设计时 Form 的自定义可浏览属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36715648/

相关文章:

python - 字典中使用的属性的 Setter

javascript - 可变属性 jQuery

c# - 获取错误 "System.Runtime.Versioning.TargetFrameworkAttribute from assembly ' mscorlib,版本 = 2.0.0。 0'"

c# - 如何合并两个或多个实现相同接口(interface)的列表

c# - 开头没有选定行的 DataGridView

c# - 允许退格按钮在经过验证的 TextBox 中工作

ios - 使用 weak with readonly 属性?

c# - 在 asp.net 核心项目中获取 Azure Active Directory 组

c# - 为什么委托(delegate)逆变对值类型不起作用?

c# - 如何从打印机变量中获取纸张大小?