Vb.net 更改usercontrol背景颜色不会显示在窗体上

Vb.net 更改usercontrol背景颜色不会显示在窗体上,vb.net,winforms,Vb.net,Winforms,我只是将一堆FoxPro代码移植到VB.NET。我有一个背景颜色为天蓝色的csslbuttonpanel用户控件。此控件被放到各种winforms上。如果我将csslbuttonpanel中的颜色更改为红色,表单仍显示天蓝色。 我错过什么了吗? 当做 格雷厄姆 这是因为您在UserControl的第一个版本中犯了错误。您忘记告诉设计师默认值是什么。您可以在“属性”窗口中轻松地看到这一点。选择表单上的一个现有属性,并注意BackColor属性的显示方式。它以粗体显示,表示其值不是默认值 由于它不是

我只是将一堆FoxPro代码移植到VB.NET。我有一个背景颜色为天蓝色的csslbuttonpanel用户控件。此控件被放到各种winforms上。如果我将csslbuttonpanel中的颜色更改为红色,表单仍显示天蓝色。 我错过什么了吗? 当做 格雷厄姆


这是因为您在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
该属性通知设计器默认设置,在本例中为天蓝色。现在,该值不会记录在表单中,在用户控件中更改默认值会很有效


容易犯错误,每个人至少犯一次。属性格式对于颜色来说非常笨拙,这没有帮助。但是,很容易修复,只需复制/粘贴代码段并将字符串更改为255、255、0、0以匹配Color.Red。重建返回表单,在现有控件的BackColor属性上单击鼠标右键,然后选择“重置”。它们现在将变为红色。

您在哪里将颜色更改为红色?在csslButtonPanel的设计器或构造函数中?你确定没有在窗体的.designer文件中再次设置csslButtonPanel的背景色,从而覆盖构造函数中设置的颜色吗?谢谢Stan,我正在将代码放入csslButtonPanel.vb文件中。正如汉斯所说,我需要这些属性。虽然我不喜欢在代码中构建这些基本面板、标签、文本框等,但这很好。很惊讶没有一个直观的方法可以做到这一点。谢谢你回复汉斯。这个代码应该放在哪里?用户控件csslButtonPanel或窗体。在designer.vb代码中还是仅在vb代码中。在用户控件中,仅在vb.vb代码中。UCs没有什么特别的错误,但是您可以选择从单个控件继承,并完全改变它的工作方式。UCs很适合包含多个控件,如果只在其上放置一个控件,则不要使用它。我已将designer.vb中的代码放置在用户控件中,这非常有效。再次感谢你,花了好几个小时试图找到那个!
<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