2011-02-15 80 views
0

有點懶,我想添加我的一些屬性到控件,而沒有創建自定義控件的麻煩。添加自定義屬性到標準控件

說有一個按鈕控件,我想添加一個輔助標籤屬性。

或者一個文本框,我想要一個oldText屬性,這...

我不需要添加的屬性在屬性窗口中顯示。我只需要在代碼中使用它們。

有什麼想法?

如果告訴我,請不要回答我必須使用自定義控件或派生類。我需要從工具欄中輕鬆使用標準控件。

在另一方面,像分部類會做...

回答

1

我認爲你最好的答案是一個,我想你不會讓我們給 - 也就是說,使用繼承來創建一個繼承控制。

但是,您可能可以使用IExtenderProvider實現進行解決。

+0

繼承控件是好的,我不想要的是一個用戶控件...你的回答很好,謝謝。我也在這裏找到了StackOverflow中的相同細節:[link](http://stackoverflow.com/questions/3364961/windows-forms-how-to-extend-a-button) –

2

對於WPF

從按鈕擴展並添加所需dependency properties。您不必從頭開始創建自定義用戶控件。

您還可以使用attached properties添加其他功能而不使用繼承。

對於的WinForms

我的WinForms是有點生疏,但我注意到你也可以simply extend from Button

+0

呃......你的回答適合WPF開發......我很抱歉地說我正在使用Winforms!也許我應該在問題中說明它。 –

+0

@ user512602:你仍然可以簡單地[從按鈕延伸](http://stackoverflow.com/q/3364961/590790)。 –

1

如果你不想進行擴展的類,你只是想引用代碼中的「屬性」,你可以考慮建立一個Dictionary<T, V>,其中T是控件的類型,以及V是你要映射的類型到控制。如果想要將多個屬性映射到同一控件,它可以是字符串或自定義類型。

也許你有

class CustomPropertyBag 
{ 
    public string OldText { get; set; } 
    public string Tag { get; set; } 
    // more 
} 

你可以有Dictionary<TextBox, CustomPropertyBag> dictionary在你的代碼,這將讓你自定義的屬性和文本框映射到一起。

dictionary[textBox1].OldText = "whatever";