[英]How to add property to existing Winforms control
我不確定這是否可行。 我做了一些研究,但未能找到任何結論。 還有一個類似的問題在這里 ,但它的WPF。
我想要做的是將自定義屬性添加到我的表單上的現有WinForms GroupBox(或任何控件)。 對於此示例,我們將使用“鏈接”。 假設我程序中的每個GroupBox都包含一個超鏈接,然后我啟動程序時需要做的就是這樣做:
MyGroupBox.Link = "http:\\www.google.com\"
稍后在我的程序中,我可以設置我的超鏈接內容以引用MyGroupBox.Link
。
有可能像這樣操縱Winforms控件嗎? 如果我不需要,我寧願不做自定義控件。
我從這個問題中看到我可以擴展我的控制權,但是在我的具體情況下我會如何看待? 這與創建自定義控件相同嗎?
一種方法是使用Extender Providers。當它添加到表單時,它就像ToolTip組件一樣,它為該表單上的每個控件提供一個名為ToolTip的屬性。您可以創建此類:
[ProvideProperty("Link", typeof(Control))]
public class ExtendControls : Component, IExtenderProvider
{
private Dictionary<Control, string> links =
new Dictionary<Control, string>();
public bool CanExtend(object extendee)
{
return !(extendee is Form);
}
public void SetLink(Control extendee, string value)
{
if (value.Length == 0)
{
links.Remove(extendee);
}
else
{
links[extendee] = value;
}
}
[DisplayName("Link")]
[ExtenderProvidedProperty()]
public string GetLink(Control extendee)
{
if (links.ContainsKey(extendee))
{
return links[extendee];
}
else
{
return string.Empty;
}
}
}
它的作用是為所有控件提供Link屬性來處理表單。現在你在windowsforms項目中創建這個類並構建它,在你去工具箱中的表單設計器后你會看到extendcontrols組件拖動它在表單上,它將被放置在組件托盤中。幾乎完成...接下來,您可以在所需控件的屬性窗口中或在此類代碼中使用新的鏈接屬性(假設您將組件保留為默認值名稱):
//assuming ofcourse you have a button called button1
//i used button as the example you can use panel,datagridview,label,etc...
//to set it...
extendControls1.SetLink(button1, "sometest");
//to get it back...
string myLink = extendControls1.GetLink(button1);
我沒有嘗試使用GroupBox,但我想你可以在這里使用Button做類似的例子。
http://msdn.microsoft.com/en-us/library/7h62478z(v=vs.90).aspx
只需創建一個新類,稱之為MyGroupBox或任何你想要的:
public class MyGroupBox : GroupBox {
private string link;
public string Link {get {return link;} set{link=value;} }
}
這將繼承GroupBox中的所有行為/屬性,並為Link添加新屬性。
然后你就可以這樣使用它:
MyGroupBox groupBox = new MyGroupBox();
groupBox.Link = "www.google.com";
我認為這比使用tag屬性更清潔,老實說。 主要是因為它不是標簽,它是一個鏈接,我喜歡能夠恰當地命名該屬性。 :)雖然如果你需要為許多控件而不僅僅是GroupBox執行此操作,標簽可能會更容易。
為了回應Savanna,您可以使用Savanna描述的方法創建擴展類,然后將實際類拖到工具箱中。 奇怪的是,您將在工具箱中擁有它,准備好在設計器模式下拖動到您的表單,完成您添加的任何自定義屬性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.