[英]C# Creating Custom Controls
我正在根據我使用的特定配置創建一些自定義控件。
我的第一個,就是創建一個標准的退出按鈕。 但是,我的想法並不奏效。 基本上,我希望默認文本是“退出應用程序”,當它被添加到表單時。 不幸的是,我想到的兩種方式,實際上並沒有顯示出來,而是顯示了按鈕類的名稱,即“CustomExitButton1”。 這是我嘗試過的兩種方式:
public class StandardExitButton : Button
{
public StandardExitButton()
{
this.ControlAdded += new ControlEventHandler(StandardExitButton_ControlAdded);
}
void StandardExitButton_ControlAdded(object sender, ControlEventArgs e)
{
Text = "Exit Application";
}
}
和:
public class StandardExitButton : Button
{
public StandardExitButton()
{
this.Text = "Exit Application";
}
}
public StandardExitButton()
{
this.Text = "Exit Application";
}
ControlAdded事件處理程序不按您的想法工作,請參閱此示例
這有用嗎?
當控件添加到控件時,ControlAdded將觸發 - 而不是在控件添加到另一個控件時。 (您可以嘗試使用ParentChanged事件。)
你必須做兩件事:
將Text屬性更改為private(以防止設置):
private new string Text
{
get
{
return base.Text;
}
set
{
base.Text = value;
}
}
設置默認文字:
public StandardExitButton()
{
this.Text = "Exit Application";
}
我已經用一堆按鈕完成了這項工作,例如添加,編輯,刪除,取消,確定,退出等...除了用我自己的標准字體大小,顏色保留我的所有按鈕,標簽,文本框等等等...對於文本,在每個子類按鈕上,我做了類似......
[ReadOnly(true)]
public override string Text
{ get { return "&Exit Application"; } }
永遠不必擔心“設置器”,因為按鈕的文本永遠不會在設計器或派生中發生變化......
編輯 - 更完整的樣本......
public class MyButton : Button
{
[ReadOnly(true)]
public sealed override Font Font
{ get { return new Font("Arial", 9F, FontStyle.Italic, GraphicsUnit.Point); } }
[ReadOnly(true)]
public sealed override Color ForeColor
{ get { return Color.Blue; } }
public GDITButton()
{ }
}
public class MyExitButton : MyButton
{
[ReadOnly(true)]
public override string Text
{ get { return "Exit"; } }
public MyExitButton()
{}
}
public class MyAddButton : MyButton
{
[ReadOnly(true)]
public override string Text
{ get { return "Add"; } }
public MyAddButton()
{}
}
然后,當您在表單上放置MyExitButton或MyAddButton的實例時,它將為您強制標題,並且還會阻止您更改它,因為它是相應類的只讀屬性。
您可能需要覆蓋按鈕public override string Text { get; set; }
public override string Text { get; set; }
public override string Text { get; set; }
地產
啊 - 這里的問題是設計師系統做了以下事情:
我在構建自定義表單設計器時已經解決了這個問題(這應該超出了你所做的范圍)。 我想不出一種方法可以超越這種行為......
怎么樣的
[DefaultValue("Exit Application")]
public override string Text
{
get
{
return base.Text;
}
set
{
base.Text = value;
}
}
您無法通過使用visual studio設計器來查看它,而是需要使用代碼加載它並運行應用程序以查看指定的Text。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.