Хотя WinForms плохо подходит для прозрачности в пользовательском контроле, это возможно.См. эту статью здесь.В нем автор предлагает использовать вместо PanelControl Panel и переопределить метод OnPaintBackground, чтобы ничего не делать.это остановит ваш фон от рисования
protected override void OnPaintBackground(PaintEventArgs pevent)
{
//do nothing
}
protected override void OnMove(EventArgs e)
{
RecreateHandle();
}
// Override the CreateParams property:
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.ExStyle = 0x00000020; //WS_EX_TRANSPARENT
return cp;
}
}
Наконец, переопределяя функцию OnPaint, вы можете нарисовать свой Picturebox.обратите внимание, вы получите мерцание и размытость, если вы перемещаете его по экрану в режиме реального времени.
Используя эту и аналогичные методики, нам удалось получить приложение WinForms Premex XPort для рендеринга с похожим брендом на их веб-сайте.Это включало несколько прозрачных элементов управления, рисование хаков и все виды, чтобы заставить его отображаться правильно.
В заключение, причина, по которой Winforms делает это плохо, заключается в технологиях на основе Win32: один элемент управления владеет одним пикселем на экране.Нет никакого способа по-настоящему составить пиксели с прозрачностью, как вы ожидаете в HTML или WPF.Более поздние технологии Windows (WPF) делают это особенно хорошо, поэтому, если вы действительно хотите интенсивно использовать прозрачность в своем приложении, я бы предложил перейти на эту платформу, по крайней мере частично (WPF можно разместить в WinForms и наоборот).
С уважением,