我正在创建一个自定义Label控件(通过简单地继承标准Label控件并重新绘制背景和文本),因为我需要一个非常特定的背景和边框。在控件的构造函数中,我将AutoSize属性设置为false,因此我可以为新标签设置标准默认大小。
Public Sub New()
'Set the default size of the control to 75x24
Me.Height = 24
Me.Width = 75
'Turn off the autosize property.
Me.AutoSize = False
'Turn on double-buffering.
Me.DoubleBuffered = True
End Sub
在我使用此控件的应用程序中,如果我在运行时(在代码中)创建新的自定义标签,则AutoSize属性保持为False,并且它可以正常工作。
如果我尝试在设计时将新的自定义标签添加到我的表单,它会将AutoSize属性设置为True,并且我必须在属性窗口中手动将其设置为False。这不是一个大问题,但我不明白为什么行为不同。
任何想法导致这种行为差异的原因是什么?
答案 0 :(得分:6)
在标签类中,您应该覆盖AutoSize属性。
//(In C#)
[System.ComponentModel.Browsable(false)]
[System.ComponentModel.DesignerSerializationVisibility(System.ComponentModel.DesignerSerializationVisibility.Hidden)]
public new bool AutoSize
{
get { return base.AutoSize; }
set { base.AutoSize = value; }
}
可浏览(false)将在设计时隐藏属性,DesignerSerializationVisibility属性将告诉设计者不要将任何代码写入设计器文件。
答案 1 :(得分:3)
我终于让它在VB中工作了。我必须禁用Set语句,实际上将Overridden AutoSize属性转换为只读属性。
Public Overrides Property AutoSize() As Boolean
Get
Return MyBase.AutoSize
End Get
Set(ByVal value As Boolean)
'Do nothing here
End Set
End Property
感谢NascarEd让我指出了正确的方向。
答案 2 :(得分:2)
仅为了将来的信息,要在属性窗口中将autosize属性设置为False,您需要设置一个属性: -
< System.ComponentModel.DefaultValue(假)> _
Public Overrides Property AutoSize()As Boolean ....
答案 3 :(得分:0)
如果您进入正在创建的新控件的设计模式,您应该能够选择该控件并根据需要更改属性。从那时起,无论何时将该控件添加到表单(或其他控件),它都会将您在此处设置的属性设置为默认值。这应该允许您设置默认值,同时保持它们可见,这样开发人员可以在不希望将来调整大小的情况下进行更改。
或者,查看设计人员生成的代码,因为它会准确显示它为生成您正在寻找的行为所做的工作。