[英]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.