C#WinForms自定义控件默认属性

时间:2012-10-12 10:35:37

标签: c# .net winforms custom-controls controls

如何设置自定义控件的默认属性,即首次将它们拖到Designer中的表单上时?

无法在此处或通过Google找到答案;我得到的就是如何限制价值观。

使用宽度和宽度高度作为示例,如果我在构造函数中设置它们,则每次打开Designer时它们都会应用于控件。如何将它们设置为默认值,在用户更改属性后永远不会再次应用它?

4 个答案:

答案 0 :(得分:6)

尝试使用DefaultValue属性。

private int height;

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

答案 1 :(得分:2)

对于我无法覆盖的属性,使用new运算符对我有用。例如,MultiSelect控件上的ListView属性。我希望MultiSelect默认为false,但我仍然希望能够更改它。

如果我只是在构造函数或false中将其设置为InitializeComponent,问题(我认为)是默认值仍然是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属性,并且仍然可以在新控件上切换属性。

编辑:我遇到了与使用抽象表单有关的问题。我一直在使用抽象表单类,我需要使用设计器时切换到具体实现。我发现当我切换继承的类时,我的自定义控件上的属性将重置为旧的默认值。我似乎已通过在自定义控件的构造函数中将属性设置为其默认值来更正此行为。

答案 2 :(得分:-1)

在构造函数中,设置将其拖动到画布上时要显示的属性的值。 或者,如果它们是基本控件的内置属性,则将它们设置在设计器代码类中。

答案 3 :(得分:-1)

以下将允许您在显示表单时添加值,之后您可以根据需要进行设置。

private int widthLength = 5;  

public int Width {      

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