transparente transparencia modos mascara illustrator form .net winforms transparency panel opacity

.net - modos - ¿Cómo puedo establecer la opacidad o transparencia de un Panel en WinForms?



modos de fusion illustrator (9)

En base a la información que se encuentra en http://www.windows-tech.info/3/53ee08e46d9cb138.php , pude lograr un control de panel translúcido usando el siguiente código.

public class TransparentPanel : Panel { protected override CreateParams CreateParams { get { CreateParams cp = base.CreateParams; cp.ExStyle |= 0x00000020; // WS_EX_TRANSPARENT return cp; } } protected override void OnPaint(PaintEventArgs e) { e.Graphics.FillRectangle(new SolidBrush(this.BackColor), this.ClientRectangle); } }

La advertencia es que los controles que se agregan al panel tienen un fondo opaco. No obstante, el panel translúcido fue útil para bloquear partes de mi aplicación WinForms, de modo que el enfoque de los usuarios se desplazó al área apropiada de la aplicación.

Me preguntaba cómo cambiar o modificar la transparencia de un Panel en C #, no en el formulario completo, sino solo en el panel. He visto muchos tutoriales de C # sobre Opacidad, pero es para el Formulario. Estoy buscando cómo podría ser posible solo con el Panel. ¡Gracias!


Esto funciona para mi En el siguiente ejemplo, el rango alfa puede ser un valor entre 0 y 255. Previamente, cometí un error al pensar que debe ser un valor de porcentaje.

Dim x as integer = 230 Panel1.BackColor = Color.FromArgb(x, Color.Blue)


No olvide llevar su Panel al frente cuando lo cree dinámicamente en el constructor de formularios. Ejemplo de superposición de panel transparente de control de pestañas.

panel1 = new TransparentPanel(); panel1.BackColor = System.Drawing.Color.Transparent; panel1.Location = new System.Drawing.Point(0, 0); panel1.Name = "panel1"; panel1.Size = new System.Drawing.Size(717, 92); panel1.TabIndex = 0; tab2.Controls.Add(panel1); panel1.BringToFront();

// <== de lo contrario, los otros controles pintan sobre la parte superior del panel transparente


Para quien todavía está buscando un panel totalmente transparente, encontré una buena solución en este blog de William Smash, quien a su vez lo tomó de Tobias Hertkorn en su blog de T # . Pensé que valía la pena publicarlo como una respuesta aquí.

C # code:

public class TransparentPanel : Panel { protected override CreateParams CreateParams { get { CreateParams cp = base.CreateParams; cp.ExStyle |= 0x00000020; // WS_EX_TRANSPARENT return cp; } } protected override void OnPaintBackground(PaintEventArgs e) { //base.OnPaintBackground(e); } }

Código VB.Net:

Public Class TransparentPanel Inherits Panel Protected Overrides ReadOnly Property CreateParams() As System.Windows.Forms.CreateParams Get Dim cp As CreateParams = MyBase.CreateParams cp.ExStyle = cp.ExStyle Or &H20 ''''#WS_EX_TRANSPARENT Return cp End Get End Property Protected Overrides Sub OnPaintBackground(ByVal e As System.Windows.Forms.PaintEventArgs) ''''#MyBase.OnPaintBackground(e) End Sub End Class


Por lo que yo sé, un Panel puede tener solo un color transparente, no puede controlar la opacidad del panel. Por lo tanto, puede hacer que algunas partes de un panel sean completamente transparentes, pero no un 50% para decir algo.

Para utilizar la transparencia, debe definir la propiedad de color transparente.


Prueba esto:

panel1.BackColor = Color.FromArgb(100, 88, 44, 55);

cambie alfa (A) para obtener la opacidad deseada.


Sí, la opacidad solo puede funcionar en ventanas de nivel superior. Utiliza una función de hardware del adaptador de video, que no admite ventanas hijas, como Panel. La única clase derivada de Control de nivel superior en Winforms es Form.

Varios de los controles ''puros'' de Winform, los que hacen su propia pintura en lugar de permitir que un control nativo de Windows haga el trabajo, respaldan sin embargo un BackColor transparente. El panel es uno de ellos. Utiliza un truco, le pide al padre que dibuje a sí mismo para producir los píxeles de fondo. Un efecto secundario de este truco es que los controles superpuestos no funcionan, solo se ven los píxeles primarios, no los controles superpuestos.

Este formulario de muestra lo muestra en el trabajo:

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); } }

Si eso no es lo suficientemente bueno, entonces debes considerar apilar formularios uno encima del otro. Me gusta esto

Notable quizás es que esta restricción se levantó en Windows 8. Ya no usa la función de superposición del adaptador de video y DWM (también conocido como Aero) ya no se puede apagar. Lo que hace que la opacidad / transparencia en Windows hijo sea fácil de implementar. Confiar en esto es, por supuesto, música futura por un tiempo. Windows 7 será el próximo XP :)


Solo quería agregar a la solución de William Smash, ya que no pude acceder a su blog, por lo que no pude encontrar las respuestas que pudieron haber estado allí para mis simples preguntas.

Me tomó un tiempo darme cuenta, pero tal vez solo estaba teniendo un momento ...

Si aún no lo ha hecho, deberá agregar una referencia a System.Windows.Forms en las propiedades del proyecto.

También necesitarás agregar

Imports System.Windows.Forms

al archivo donde está agregando la clase de modificación.

Para OnPaintBackground, necesitarás agregar una referencia para System.Drawing y luego

Imports System.Drawing.Printing.PrintEventArgs


algunos comentarios dicen que funciona y algunos dicen que no. Funciona solo para su fondo de form y no para ningún otro controls detrás