标签控件在设计时与运行时的行为不同

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
Run Code Online (Sandbox Code Playgroud)

在我使用此控件的应用程序中,如果我在运行时(在代码中)创建新的自定义标签,则AutoSize属性保持为False,并且它可以正常工作.

如果我尝试在设计时将新的自定义标签添加到我的表单中,则将AutoSize属性设置为True,我必须在属性窗口中手动将其设置为False.这不是一个大问题,但我不明白为什么行为不同.

是什么导致了这种行为上的差异?

Nas*_*rEd 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; }
}
Run Code Online (Sandbox Code Playgroud)

可浏览(false)将在设计时隐藏属性,DesignerSerializationVisibility属性将告诉设计者不要将任何代码写入设计器文件.


Ste*_*bob 3

我终于让它在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
Run Code Online (Sandbox Code Playgroud)

感谢 NascarEd 为我指明了正确的方向。