簡體   English   中英

C#WinForms自定義控件默認屬性

[英]C# WinForms custom control default properties

如何設置自定義控件的默認屬性,即首次將它們拖動到Designer中的表單上?

無法在此處或通過Google找到答案; 我得到的是如何約束價值觀。

使用Width&Height作為示例,如果我在構造函數中設置它們,則每次打開Designer時它們都會應用於控件。 如何將它們設置為默認值,在用戶更改屬性后永遠不會再次應用它?

嘗試使用DefaultValue屬性。

private int height;

[DefaultValue(50)]
public int Height
{
    get 
    {
       return height;
    }
    set 
    {
       height=value;
    }
 }

對於我無法覆蓋的屬性,對我有用的是使用new運算符。 例如, ListView控件上的MultiSelect屬性。 我希望MultiSelect默認為false ,但我仍然希望能夠更改它。

如果我只是在構造函數或InitializeComponent中將其設置為false ,問題(我認為)是默認值仍為true ,因此如果我在設計器中將值設置為true ,則設計器會注意到true是默認值,所以根本不設置屬性,而不是明確地將其設置為它認為已經是默認值。 但是這個值最終會false ,因為這是構造函數中設置的內容。

為了解決這個問題,我使用了以下代碼:

/// <summary>Custom ListView.</summary>
public sealed partial class DetailsListView : ListView
{
   ...

   [DefaultValue(false)]
   public new bool MultiSelect {
      get { return base.MultiSelect; }
      set { base.MultiSelect = value; }
   }

這允許控件仍具有正常運行的MultiSelect屬性,默認為false而不是true ,並且仍可以在新控件上切換屬性。

編輯:我遇到了與使用抽象表單有關的問題。 我一直在使用抽象表單類,我需要使用設計器時切換到具體實現。 我發現當我切換繼承的類時,我的自定義控件上的屬性將重置為舊的默認值。 我似乎已通過在自定義控件的構造函數中將屬性設置為其默認值來更正此行為。

在構造函數中,設置將屬性拖動到畫布上時要顯示的屬性的值。 或者,如果它們是基本控件的內置屬性,則將它們設置在設計器代碼類中。

下面將允許您在顯示表單時添加值,之后您可以根據需要進行設置。

private int widthLength = 5;  

public int Width {      

     get { return widthLength ; } 
     set { widthLength = value;   
} 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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