我只是将一堆FoxPro代码移植到VB.NET。我有一个csslbuttonpanel用户控件,背景颜色为skyblue。该控件被放到各种winforms上。如果我将csslbuttonpanel中的颜色更改为红色,表单仍会显示天蓝色。 我错过了什么吗? 问候 格雷厄姆
Public Class csslButtonPanel
Inherits Panel
Public Sub New()
' This call is required by the designer.
InitializeComponent()
BackColor = Color.Red
' Add any initialization after the InitializeComponent() call.
End Sub
End Class
答案 0 :(得分:2)
这是因为您在UserControl的第一个版本中犯了一个错误。你忘了告诉设计师默认值是什么。您可以在“属性”窗口中轻松查看此内容。选择表单上现有的一个,并注意BackColor属性的显示方式。它以粗体类型显示,表示其值不是默认值。
由于它不是默认值,因此它在形式的InitializeComponent()方法中记录了Color.SkyBlue。现在更改UserControl中的默认值无效,它会继续使用在表格的InitializeComponent()方法中选择的值。
应所做的是告诉设计师有关属性的默认值。像这样:
<DefaultValue(GetType(Color), "255, 135, 206, 235")> _
Public Overrides Property BackColor As Color
Get
Return MyBase.BackColor
End Get
Set(value As Color)
MyBase.BackColor = value
End Set
End Property
在这种情况下,<DefaultValue>
属性会通知设计者默认的SkyBlue。现在,值不会记录在表单中,更改用户控件中的默认值可能会有效。
容易犯错,每个人至少做一次。属性格式对于Color来说非常尴尬,这没有任何帮助。但是很容易修复,只需复制/粘贴代码片段并将字符串更改为&#34; 255,255,0,0和#34;匹配Color.Red。重建。返回到表单并右键单击现有控件上的BackColor属性,然后选择“重置”。他们现在变红了。