2010-01-17 130 views
55

我已经在Visual Studio(WinForms C#)中开发了一个用户控件并且有一个问题。用户控件 - 自定义属性

我需要我的用户控件的用户能够更改某些字符串值,我希望他们能够将用户控件添加到他们的窗体并单击它以调出属性窗格,其中我的用户控件的自定义属性将被显示。

如何为我的用户控件拥有自己的自定义属性?例如:

我的用户控件包含一个TextBox,并且我希望用户能够通过设计时属性中名为“Text”或“Value”的属性更改该TextBox的值。

+0

请参阅文章 - [在C#中创建自定义控件](http://www.c-sharpcorner.com/UploadFile/f5a10c/creating-custom-controls- in-C-Sharp /) – 2016-02-01 08:11:34

回答

88

你可以通过对属性的属性做到这一点,是这样的:

[Description("Test text displayed in the textbox"),Category("Data")] 
public string Text { 
    get { return myInnerTextBox.Text; } 
    set { myInnerTextBox.Text = value; } 
} 

类别是根据其属性将出现在Visual Studio的属性框的标题。 Here's a more complete MSDN reference,包括类别列表。

+2

每次我想用这段代码生成项目时,我的VS2010崩溃了,要么包含System.ComponentModel,要么:& – 2013-11-07 16:51:16

6

只需将公共属性添加到用户控件。

您可以添加[Category("MyCategory")][Description("A property that controls the wossname")]属性,使之更好,但只要它是一个公共财产它应该在属性面板中显示出来。

31

这是非常简单,只需添加一个属性:

public string Value { 
    get { return textBox1.Text; } 
    set { textBox1.Text = value; } 
} 

使用Text属性是有点棘手,用户控件类有意隐瞒了。您需要覆盖属性:

[Browsable(true), EditorBrowsable(EditorBrowsableState.Always)] 
public override string Text { 
    get { return textBox1.Text; } 
    set { textBox1.Text = value; } 
} 
+1

非常感谢!完全忘记了这一点,这让我想起了试图召回的事情。 – Damian 2017-03-07 21:26:47