检查子控件是否已由用户设置其BackColor

时间:2013-12-12 10:44:50

标签: c# vb.net panel backcolor

我正在创建的自定义面板遇到很多困难。

它有圆角,因此BackColor仅在角落中可见,而面板的主要颜色是单独的颜色m_mainPanelColour。不幸的是,当我添加一个控件时,我添加的控件将其BackColor设置为Panel.BackColor,而不是m_mainPanelColour

我已经覆盖了OnControlAdded事件,将新添加的控件的BackColor设置为m_mainPanelColour,但是我已经意识到如果控件的BackColor没有显式设置,我只想要这种行为用户。

我的问题是,我不知道如何查询此方案的控件。但是,它必须是可行的,因为标准的Windows面板可以实现它。

有人有什么建议吗?提前谢谢。

1 个答案:

答案 0 :(得分:0)

您可能希望在自定义控件中声明Sub New()并在 InitializeComponent()之前添加以下代码行

SetStyle(ControlStyles.ResizeRedraw Or _
         ControlStyles.AllPaintingInWmPaint Or _
         ControlStyles.OptimizedDoubleBuffer Or _
         ControlStyles.SupportsTransparentBackColor Or _
         ControlStyles.UserPaint, True)

UpdateStyles()

这将启用透明背景色支持。这样,您可以在控件Color.Transparent上创建默认颜色,因此,当且仅当控件的用户选择不同的颜色时,它才会被绘制。当然,你必须自己接管绘制整个控件。

通常e.Graphics.Clear(Color.Transparent)可以使用透明黑色(& H0I)快速填充控件。但请记住,如果您在绘制事件之外访问Graphics对象(例如,通过调用Me.CreateGraphics),您将无法轻松地将背景清除为透明。