Это потому, что, если я правильно помню, установка цвета фона Transparent (его фактическое значение равно нулю, верно?) Не является действительно прозрачным. Что делает Windows, так это смотрит на цвет фона родительского контейнера элемента управления и устанавливает для него цвет фона элемента управления.
Вы можете видеть это, особенно с панелями. Без содержимого панели с прозрачностью должны позволять вам видеть за ними, верно? Неправильно. Если вы поместите панель поверх, скажем, элементов управления текстовым полем и установите для нее значение «Прозрачный», вы не сможете видеть текстовые поля за ней.
Вместо этого, чтобы получить реальную прозрачность, вы должны перегрузить OnPaintBackground для рассматриваемого элемента управления и, по сути, абсолютно ничего не делать (НЕ вызывайте и base.OnPainBackground!) ... Это больше, чем это, возможно , но вот пример рабочего элемента управления TransparentPanel, который мы используем здесь:
public class TransparentPanel : System.Windows.Forms.Panel
{
[Browsable(false)]
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.ExStyle |= 0x20;
return cp;
}
}
protected override void OnPaintBackground(PaintEventArgs e)
{
// Do Nothing
}
}
Мы успешно использовали этот класс для создания действительно прозрачных панелей в прошлых приложениях Windows Forms. Мы использовали его как хак для исправления проблемы «контекстное меню, вызываемое правой кнопкой мыши, появляется над кнопками».