如何在WinForms中扩展控件

本文关键字:扩展 控件 WinForms | 更新日期: 2023-09-27 18:26:28

任何控件。但最好是所有这些(TextBox、Panel、Button、LinkLabel、TabControl等)。我想做的是:

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);
}

如何在WinForms中扩展控件

您可以通过继承要添加函数的控件来创建自定义控件

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; }
    }
}

使用

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

我认为您要寻找的答案是DefaultValue属性。在类中设置一次,然后每当创建对象时,都会为其分配值。使用此属性保存对象数据有几个陷阱,所以要小心并进行回归测试。

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

[默认值("作者名称")]

您总是可以创建一个扩展到控件之外的类,并覆盖您想要添加功能的方法。

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。