2010-01-17 123 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