2011-03-05 25 views
6

Cómo hacer que forma semi transparente en C# ventanas formulario de solicitudforma semi-transparente, pero opacos Controles en C#

He probado el TransparentKey que hace que sea completa transparente. e intenté Opacity pero afecta a todo el formulario (con controles).

Quiero que la parte de la forma sea semitransparente pero no Controles.

Respuesta

7

Puede utilizar un hatch brush con un cierto porcentaje, por ejemplo:

using System.Drawing.Drawing2D; 

    private void Form1_Paint(object sender, PaintEventArgs e) 
    { 
     var hb = new HatchBrush(HatchStyle.Percent50, this.TransparencyKey); 

     e.Graphics.FillRectangle(hb,this.DisplayRectangle); 
    } 
+6

Oh mi. El resultado es repugnante. Lo siento, pero realmente lo es. –

2

Hay una solución que añadir semi-transparencia a un control (no Formulario):

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 

     // Apply opacity (0 to 255) 
     panel1.BackColor = Color.FromArgb(25, panel1.BackColor); 
    } 

En visual Studio: (alfa activado solo d urante la ejecución)

enter image description here

ejecutado en Windows 7:

enter image description here

Ejecutado en un viejo Windows 2003 Server:

enter image description here

Fuente: https://stackoverflow.com/a/4464161/1529139

+0

El formulario no es semitransparente en su ejemplo ..., ¿o extraño algo? – user1027167

+0

Tal vez el fondo es muy uniforme y no es lo suficientemente claro, pero realmente funciona con canal alfa. Si miras detenidamente, verás el sombreado :) – 56ka

+1

He probado y tengo el siguiente resultado: El botón1 es opaco, el panel1 es semitransparente, el form1 es opaco. No se puede ver qué hay detrás del formulario, pero la pregunta era sobre una forma semitransparente. Entonces tengo el mismo problema, pero su respuesta parece no ser correcta ... – user1027167

0

me encontré con la escotilla cepillo grotesca,

En lugar de:

protected override void OnPaintBackground(PaintEventArgs e) { 
    var hb = new HatchBrush(HatchStyle.Percent80, this.TransparencyKey); 
    e.Graphics.FillRectangle(hb, this.DisplayRectangle); 
} 

utilicé:

protected override void OnPaintBackground(PaintEventArgs e) { 
    var sb = new SolidBrush(Color.FromArgb(100, 100, 100, 100)); 
    e.Graphics.FillRectangle(sb, this.DisplayRectangle); 
} 
Cuestiones relacionadas