Ste*_*bob 6 .net vb.net visual-studio-2008 winforms
我正在创建一个自定义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.这不是一个大问题,但我不明白为什么行为不同.
是什么导致了这种行为上的差异?
在标签类中,您应该覆盖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属性将告诉设计者不要将任何代码写入设计器文件.
我终于让它在VB中工作了。我必须禁用 Set 语句,实质上将覆盖的 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 为我指明了正确的方向。