我正在创建一个自定义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属性将告诉设计者不要将任何代码写入设计器文件.