2016-01-06 176 views
-1

我希望將每個文本框添加到我的一個表單中,使其看起來相同並具有相同的屬性。例如,我給文本框,我也想要這個按鈕和組合框。我的問題是如何爲每個控件定義一組默認屬性。 我可以做到這些形式嗎?如何定義默認控件屬性?

+1

您可以創建自定義控件,該控件不會更改任何內容,但不會更改默認值。例如。 'MyButton:Button'在構造函數中用你的默認值覆蓋。 – Sinatr

回答

2

創建每個控件的自定義類。例如,如果你想要文本框中說「你好世界」,你會用這個。

public class NewTextBox : TextBox 
{ 
    //The constructor, called for every new instance of the class. 
    public NewTextBox() 
    { 
     Text = "hello world"; 
    } 
} 

然後在窗體中使用這個函數,你可以像這樣調用一個新的實例。

NewTextBox tb = new NewTextBox();//Create new text box 
Controls.Add(tb);//Add text box to form. 
+0

好的謝謝!另一個問題,當我以這種方式使用它時,我會在設計器中看到它嗎? –

+0

您將在Visual Studio中的Control Toolbox中看到它,並且您可以拖放到窗體和控件 – Andez

+0

有時它們不會自動出現在設計器中,發生這種情況時,請在窗體的構造器中創建該類的實例(public Form1 ()....等),然後運行該程序。現在您將看到工具箱中的控件,並且您可以從設計器中刪除該實例。 – Rariolu

2

一種解決方案是通過繼承基本控件並使用DefaultValue屬性裝飾屬性來創建自己的控件庫。例如:

public class MyTextBox: TextBox 
{ 
    public MyTextBox() 
    { 
    Text = "Hi"; 
    } 

    [DefaultValue("Hi")] 
    public new string Text 
    { 
    get 
    { 
     return base.Text; 
    } 
    set 
    { 
     base.Text = value; 
    } 

} 

使用new關鍵字是因爲該屬性被重新定義。

+1

這是設計師默認值的一個好主意。您仍然需要在某處設置默認值。例如。在構造函數'Text =「Hi」;'中。 – Sinatr

+0

@Sinatr:你說得對,謝謝,我已經更新了答案。 –

+0

+1用於提供默認值屬性。但是隱藏「Text」屬性不是一個好主意。大多數屬性都是專門用於重寫和應用不同屬性的虛擬屬性。正確的答案是'[DefaultValue(「Hi」)] public override string Text ...'。 –