2009-01-04 55 views
20

我用一個文本框和一個richtextbox做了一個C#用戶控件。如何訪問C#中的usercontrol的屬性#

如何從usercontrol外部訪問richtextbox的屬性。

例如..如果我把它放在一個窗體中,我如何使用richtextbox的Text屬性?

感謝

回答

32

乾淨的方法是爲你的用戶控件的屬性,如暴露所需的性能:

class MyUserControl 
{ 
    // expose the Text of the richtext control (read-only) 
    public string TextOfRichTextBox 
    { 
    get { return richTextBox.Text; } 
    } 
    // expose the Checked Property of a checkbox (read/write) 
    public bool CheckBoxProperty 
    { 
    get { return checkBox.Checked; } 
    set { checkBox.Checked = value; } 
    } 


    //... 
} 

這樣你可以控制你要公開哪些屬性以及是否應讀/寫或讀 - 只要。 (當然你應該使用更好的屬性名稱,具體取決於它們的含義)。

這種方法的另一個優點是它隱藏了用戶控件的內部實現。如果您想要將RichText控件與其他控件進行交換,則不會破壞控件的調用者/用戶。

+0

在,公共布爾CheckBoxProperty { get {return checkBox.Checked; } get {checkBox.Checked = value; } } 得到應該是一組 – 2009-11-24 18:15:35

3

更改訪問修飾符在屬性網格公共RichTextBox中的(「調節器」)。

+2

這可能不是最好的主意,因爲它允許控件的使用者完全控制RichTextBox。你只應該公開消費者應該能夠改變的屬性。 – 2009-01-04 19:36:32

3

一個屬性添加到用戶控件這樣

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

你需要做一個公共屬性的RichTextBox的,或暴露,做設置RichTextBox的文字一樣的工作的一些其他財產:

private RichTextBox rtb; 

public string RichTextBoxText 
{ 
    get 
    { 
     return rtb.Text; 
    } 
    set 
    { 
     rtb.Text = value; 
    } 
} 
2

我最近有一些問題,自定義類這樣做:

用戶控制了公共財產這是一個自定義類的類型。默認情況下,設計者會嘗試爲其分配一些值,因此在設計器代碼中,userControlThing.CustomClassProperty = null行被自動添加。

意圖是能夠在運行程序的任何時刻爲用戶控件提供自定義類(以更改用戶可見的值)。由於set {}部分沒有檢查空值,所以出現了各種錯誤。

解決方案是將屬性更改爲私有屬性,並使用兩個公共方法來設置和獲取值。設計人員會嘗試自動分配屬性,但只保留方法。