Проблема, с которой вы сталкиваетесь, заключается в том, что элементы управления WinForms не поддерживают истинную прозрачность, и заставить их сделать это может быть немного сложно.Они рисуют дочерний элемент управления (когда прозрачность включена через SetStyle), но у этого есть свои особенности.Сначала вы должны попробовать что-то вроде этого:
// in your custom control class...
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.ExStyle |= 0x00000020; //WS_EX_TRANSPARENT
return cp;
}
}
Я нашел этот метод более надежным, чем следующие, но вы должны попробовать это также:
public MyTransparentControl()
{
SetStyle( ControlStyles.SupportsTransparentBackColor |
ControlStyles.AllPaintingInWmPaint |
ControlStyles.UserPaint, true );
BackColor = Color.Transparent;
}
В качестве альтернативыподход, вы рассматривали возможность использования WPF вместо WinForms?Я знаю, что это не всегда вариант, но если это так, вы значительно упростите свою жизнь, так как элементы управления WPF поддерживают прозрачность и управляют многоуровневым управлением из коробки.