Да, прозрачность может работать только в окнах верхнего уровня. Он использует аппаратную функцию видеоадаптера, которая не поддерживает дочерние окна, например Panel. Единственный производный класс управления верхнего уровня в Winforms - это Form.
Некоторые из «чистых» элементов управления Winform, те, которые рисуют самостоятельно, вместо того, чтобы позволить собственному элементу управления Windows выполнять работу, поддерживают прозрачный BackColor. Панель является одним из них. Он использует трюк, просит родителя нарисовать себя, чтобы получить фоновые пиксели. Одним из побочных эффектов этого трюка является то, что перекрывающиеся элементы управления не работают, вы видите только родительские пиксели, а не перекрывающиеся элементы управления.
Этот образец формы показывает это на работе:
public partial class Form1 : Form {
public Form1() {
InitializeComponent();
this.BackColor = Color.White;
panel1.BackColor = Color.FromArgb(25, Color.Black);
}
protected override void OnPaint(PaintEventArgs e) {
e.Graphics.DrawLine(Pens.Yellow, 0, 0, 100, 100);
}
}
Если это не достаточно хорошо, вам нужно рассмотреть возможность размещения форм друг на друге. Вот так .
Возможно, примечательно, что это ограничение снято в Windows 8. Он больше не использует функцию наложения видеоадаптера, и DWM (он же Aero) больше нельзя отключить. Что делает прозрачность / прозрачность дочерних окон легко реализуемой. Полагаться на это, конечно же, будет музыка будущего. Windows 7 будет следующей XP:)