2013-08-05 39 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。