2009-10-11 24 views

Respuesta

7

No creo que se pueda aplicar la transparencia (más correctamente denominado, opacidad) a sólo una parte de una forma más que la forma completa, total.

Puede, sin embargo, crear una forma personalizada (es decir, no rectangular) con bastante facilidad, con varias partes de esa forma siendo transparentes. Dependiendo del "aspecto" exacto que está tratando de lograr, esto puede ser lo más cercano que obtendrá.

Echa un vistazo a estos enlaces para crear su propia forma personalizada formulario:

Creating Custom Shaped Windows Forms in .NET
Custom shaped form with a drop down in C#
Shaped Windows Forms and Controls in Visual Studio .NET

La única otra alternativa puede ser la de mostrar dos formas, una de las cuales se establecen ser parcialmente transparente. Debería asegurarse programáticamente de que la segunda forma se coloque inmediatamente al lado de la forma "principal", y se mueva/redimensione proporcionalmente cuando el usuario mueva/cambie el tamaño de la forma "principal". Aunque se trata de dos formas, se podría hacer que parezca, para el usuario, que en realidad es solo una forma, aunque esto podría ser bastante complicado de lograr, y no sería una solución perfecta (pero puede ser "lo suficientemente buena" dependiendo según sus necesidades exactas).

0

No estoy seguro de si esto es posible con WinForms sin un uso excesivo de p/invocar llamadas y soluciones temporales.

En su lugar, puede utilizar Windows Presentation Foundation (WPF), donde tales efectos son casi triviales de implementar.

+0

¿Por qué? ¿Qué estuvo mal con mi respuesta? En WinForms puede establecer la transparencia solo en el formulario completo, pero no en las partes, por lo que dudo que se pueda hacer fácilmente. – codymanix

+0

+1 para contrarrestar el downvote. No es tan difícil hacer esto en WinForms, pero * es * ligeramente hacky y WPF * es * mejor para este tipo de cosas (aunque es menos divertido cuando los ingenieros de MS hacen todo por ti). – MusiGenesis

+0

Al menos su argumento "menos divertido" puede considerarse muy controvertido .. – codymanix

0

simple:

myForm.Opacity = 80; // Change 80 with your value 
+2

@FBSC - Eso cambiará la opacidad del formulario completo. Parece que la pregunta original asker solo quiere cambiar la opacidad de una parte de la forma, no la forma completa. – CraigTP

+0

Lo siento, me salté esa "parte": S – FBSC

5

Puede hacerlo creando una ventana completamente transparente en su formulario y luego flotando una forma semitransparente sobre la ventana completamente transparente.

Primero, establezca TransparencyKey de su formulario principal en Color.Red, luego coloque un Panel con el nombre panel1 en el formulario y establezca BackColor en Rojo. Esto creará la "ventana" completamente transparente. Crear una referencia Formulario de nivel de formulario así:

private Form _floater; 

A continuación, poner este código en el evento Load del formulario principal:

_floater = new Form(); 
_floater.ShowInTaskbar = false; 
_floater.FormBorderStyle = FormBorderStyle.None; 
_floater.Opacity = .5; 
_floater.Size = panel1.Size; 
_floater.StartPosition = FormStartPosition.Manual; 
_floater.Location = panel1.PointToScreen(new Point(0, 0)); 
_floater.Show(this); 

Por último, poner este código en caso de movimiento de su forma principal:

_floater.Location = panel1.PointToScreen(new Point(0, 0)); 

El único problema aquí es que si el usuario hace clic en la "ventana" semitransparente, el segundo formulario obtendrá el foco, por lo que la Barra de título de su formulario principal estará atenuada.

Click here para ejecutar una aplicación de muestra con esta ventana semitransparente en un formulario.

Cuestiones relacionadas