我在TabControl中的TabPage上有一个TrackBar控件。 TrackBar的背景以灰色绘制,而TabPage绘制为白色。无法将TrackBar的BackColor属性设置为透明,我无法覆盖绘图,因为TrackBar没有DrawMode属性。我有什么选择让TrackBar适合?为什么它不支持视觉风格?
答案 0 :(得分:2)
简单
class MyTransparentTrackBar : TrackBar
{
protected override void OnCreateControl()
{
SetStyle(ControlStyles.SupportsTransparentBackColor, true);
if (Parent != null)
BackColor = Parent.BackColor;
base.OnCreateControl();
}
}
我也遇到了这个问题(需要在制表符控件上使用透明背景轨道栏,这将启用和禁用视觉样式)。这对我有用。
答案 1 :(得分:2)
不会干涉这里,但上述建议都不适合我。 诀窍是以下几行:
private const int WM_DWMCOMPOSITIONCHANGED = 0x031A;
private const int WM_THEMECHANGED = 0x031E;
protected override void OnVisibleChanged(EventArgs e)
{
Color color = this.BackColor;
trackBarQuality.BackColor = Color.FromArgb(color.R, color.G, color.B);
}
protected override void WndProc(ref Message m)
{
if (m.Msg == WM_DWMCOMPOSITIONCHANGED || m.Msg == WM_THEMECHANGED)
OnVisibleChanged(new EventArgs());
base.WndProc(ref m);
}
所以我基本上从背景颜色中消除了alpha通道。尽管如此,仍然需要用Vista和Win 7来测试它。
答案 2 :(得分:1)
您可能希望查看CodePlex上的TransparentTrackBar项目。
答案 3 :(得分:-1)
显而易见的解决方案似乎是将TrackBar的BackColor设置为System-ControlLightLight。
(但对四年之久的问题有明显解决方案的问题是它可能意味着我误解了一些东西。)