簡體   English   中英

C#創建自定義控件

[英]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; }地產

啊 - 這里的問題是設計師系統做了以下事情:

  • 創建一個控件實例(在構造函數中執行代碼),因此您的文本在很短的時間內都是“退出應用程序”。
  • 接下來,無論您將text屬性設置為什么,設計器都會將文本顯式設置為控件的名稱。

我在構建自定義表單設計器時已經解決了這個問題(這應該超出了你所做的范圍)。 我想不出一種方法可以超越這種行為......

怎么樣的

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM