簡體   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