我正在创建一个自定义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; }
}

browsable(false)将在设计时隐藏该属性,而DesignerSerializationVisibility属性将告诉设计器不要将任何代码写入设计器文件。

10-05 19:12