更改用户控件背景颜色不会在表单上显示

时间:2015-04-22 07:07:33

标签: vb.net winforms

我只是将一堆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

1 个答案:

答案 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属性,然后选择“重置”。他们现在变红了。