如何设置自定义控件的默认属性,即当它们第一次被拖到设计器中的表单上时?
在此处或通过 Google 找不到答案;我得到的只是如何约束这些值。
以宽度和高度为例,如果我在构造函数中设置它们,则每次打开设计器时它们都会应用于控件。如何将它们设置为用户更改属性后不再应用的默认值?
如何设置自定义控件的默认属性,即当它们第一次被拖到设计器中的表单上时?
在此处或通过 Google 找不到答案;我得到的只是如何约束这些值。
以宽度和高度为例,如果我在构造函数中设置它们,则每次打开设计器时它们都会应用于控件。如何将它们设置为用户更改属性后不再应用的默认值?
尝试使用DefaultValue属性。
private int height;
[DefaultValue(50)]
public int Height
{
get
{
return height;
}
set
{
height=value;
}
}
对于我无法覆盖的属性,对我有用的是使用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
,并且仍然可以在新控件上切换该属性。
编辑:我遇到了与使用抽象形式有关的问题。我一直在使用抽象表单类,并在需要使用设计器时切换到具体实现。我发现当我切换我继承的类时,我的自定义控件上的属性将重置为旧的默认值。我似乎通过在自定义控件的构造函数中将属性设置为默认值来纠正这种行为。
下面将允许您在显示表单时添加值,之后您可以根据需要进行设置。
private int widthLength = 5;
public int Width {
get { return widthLength ; }
set { widthLength = value;
}
在构造函数中,设置您希望在将其拖到画布上时显示的属性值。或者,如果它们是基本控件的内置属性,则在设计器代码类中设置它们。