我正在创建的自定义面板遇到很多困难。
它有圆角,因此BackColor
仅在角落中可见,而面板的主要颜色是单独的颜色m_mainPanelColour
。不幸的是,当我添加一个控件时,我添加的控件将其BackColor设置为Panel.BackColor
,而不是m_mainPanelColour
。
我已经覆盖了OnControlAdded
事件,将新添加的控件的BackColor设置为m_mainPanelColour
,但是我已经意识到如果控件的BackColor没有显式设置,我只想要这种行为用户。
我的问题是,我不知道如何查询此方案的控件。但是,它必须是可行的,因为标准的Windows面板可以实现它。
有人有什么建议吗?提前谢谢。
答案 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),您将无法轻松地将背景清除为透明。