繁体   English   中英

如何在WinForms中扩展控件?

[英]How do I extend a Control in WinForms?

任何控制。 但最好都是它们(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);
}

您可以通过继承要向其添加功能的控件来创建Custom控件。 这样的事情应该可以工作( 以按钮为例

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/zh-CN/library/system.componentmodel.defaultvalueattribute(v=VS.71).aspx

[DefaultValue(“作者名称”)]

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

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。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM