#c_sharp #net #visual_studio #winforms
Как можно задать прозрачность panel1 в WinForms? Кроме этого варианта ничего не работает в VS2015. public sealed class TransparentPanel : Panel { protected override CreateParams CreateParams { get { CreateParams cp = base.CreateParams; cp.ExStyle |= 0x20; return cp; } } protected override void OnPaint(PaintEventArgs e) { e.Graphics.FillRectangle(new SolidBrush(Color.FromArgb(0, 0, 0, 0)), this.ClientRectangle); } protected override void OnSizeChanged(EventArgs e) { base.OnSizeChanged(e); } }
Ответы
Ответ 1
Так можно сделать панель, да и любой другой контрол, прозрачным в любой момент времени, без переписывания OnPaint(). Ну не совсем прозрачным. просто из всей панели, для отрисовки остаются только контролы размещенные на ней. Неприкрытые контролами части панели просто не обрабатываются. GraphicsPath gr = new GraphicsPath(); foreach (Control c in panel1.Controls) { gr.AddRectangle(new Rectangle(c.Location, c.Size)); } panel1.Region = new Region(gr); С помощью свойства Region и объектов GraphicsPath можно придать контролу WinForms любую, сколь угодно сложную форму, например криволинейный многоугольник с дырками или N независимых фрагментов работающих как один контрол. Upd Такой вариант: panel1.BackColor = System.Drawing.Color.Transparent; не работает, точнее работает не так как ожидается. Контрол копирует цвет фона родительского контрола, на этом "прозрачность" и заканчивается. т.е. если у вас под такой панелью окажется другой контрол, то виден он не будет.Ответ 2
Есть вот такой способ: panel1.BackColor = Color.FromArgb(0,0,0,0); panel1.Parent = this; Вместо this нужно подставить контрол над которым располагается ваша панель. Но она будет прозрачна только по отношению к этому контролу. С помощью первого параметра метода FromArgb() можно контролировать степень прозрачности.
Комментариев нет:
Отправить комментарий