2013-08-05 37 views
1

任何控件。但最好是所有的(TextBox,Panel,Button,LinkLabel,TabControl等)。我想這樣做的是:如何在WinForms中擴展控件?

public class Something 
{ 
    public String isBetterThan { get; set; } 
    public String Author { get; set; } 
} 

public void button1_Click(object sender, EventArgs e) 
{ 
    panelControl1.ClassObject = new Something() 
     { 
     isBetterThan = "nothing.", 
     Author = "Unknown" 
     }; 
} 

所以從上面的代碼中,你可以看到,它同樣地起作用,在.Location屬性,在這裏你指定一個新的值。我想存儲這些信息,因此以後,我可以簡單地這樣做:

public void getClassDetailsButton_Click(object sender, EventArgs e) 
{ 
    Something something = (Something)panelControl1.ClassObject; 
    MessageBox.Show("Something is better than " + something.isBetterThan); 
} 
+0

「標籤」屬性如何? – RoadBump

+0

RoadBump,這是一個好主意。但是我感到無聊,我覺得要學習新的東西。但!!!我只是想出如何去做我想做的事情!我現在發佈一個答案! yay – uSeRnAmEhAhAhAhAhA

回答

2

您可以創建由您正試圖將功能添加到控件繼承自定義控制。像這樣的東西應該工作(使用按鈕作爲例子

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 

namespace WindowsFormsApplication1 
{ 
    class SomethingButton : Button 
    { 
     public Something mySomething 
     { get; set; } 
    } 

    public class Something 
    { 
     public String isBetterThan { get; set; } 
     public String Author { get; set; } 
    } 

} 

Usuage

somethingButton1.mySomething = new Something() { isBetterThan = "nothing", 
               Author = "Unknown" 
               }; 
2

我認爲你正在尋找的答案是默認值屬性。您可以在課程中設置一次,然後每當創建對象時就會爲其分配值。使用此屬性保存對象數據有幾個缺陷,所以請謹慎使用並進行迴歸測試。

http://msdn.microsoft.com/en-us/library/system.componentmodel.defaultvalueattribute(v=VS.71).aspx

[默認值(「作者姓名」)

+0

不,它沒有。在你的鏈接中:'一個DefaultValueAttribute不會導致一個成員被該屬性的值自動初始化。您必須在代碼中設置初始值。DefaultValue屬性用於設計器用於序列化,並且還用它來確定PropertyGrid中的屬性是否應加粗。 – LarsTech

1

你總是可以創建擴展超出控制的一類,並覆蓋你想添加功能的方法。

public class MyTextBox : TextBox { 

public String isBetterThan { get; set;} 
public String author {get; set;} 

protected override void OnMouseLeave(MouseEventArgs e)   
{    
    base.OnMouseLeave(e); 
    // do something 
    isBetterThan = this.Text; 
}  
} 

然後,將控件添加到您的窗體。你可以把它看作一個普通的TextBlock,但也可以要求它是isBetterThan和Author。