2010-12-15 3 views
12

Ayer encontré algo muy extraño (creo). Parece que Form.TransparencyKey ofrece resultados diferentes según el color que se use como BackgroundColor y TransparencyKey. Si se quiere reproducir esto, haz lo siguiente:C# Form.TransparencyKey funciona de forma diferente para diferentes colores, ¿por qué?

  1. Crear nueva aplicación de Windows Forms
  2. gota una Panel en el formulario
  3. Dale "verde" como BackgroundColor y establecer Form1 de TransparencyKey también a Green
  4. Ejecute el programa y coloque el formulario con "agujero" sobre algo y verá que puede hacer clic en ese agujero (como lo describe MSDN)
  5. Ahora cambie ambos colores a "Rojo" y ejecute la aplicación; verá " agujero "pero ya no puede hacer clic

¿Sabes por qué sucede eso? ¿Cual es la regla? Estoy usando .NET 4 con VS2010, probado en dos computadoras con la misma configuración.

No hay mucho código para esto ... Pero me pueden enviar ajustes en el diseñador:

private void InitializeComponent() 
{ 
    this.panel1 = new System.Windows.Forms.Panel(); 
    this.SuspendLayout(); 
    // 
    // panel1 
    // 
    this.panel1.BackColor = System.Drawing.Color.Red; 
    this.panel1.Location = new System.Drawing.Point(23, 26); 
    this.panel1.Name = "panel1"; 
    this.panel1.Size = new System.Drawing.Size(229, 176); 
    this.panel1.TabIndex = 0; 
    // 
    // Form1 
    // 
    this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); 
    this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 
    this.ClientSize = new System.Drawing.Size(284, 262); 
    this.Controls.Add(this.panel1); 
    this.Name = "Form1"; 
    this.Text = "Form1"; 
    this.TransparencyKey = System.Drawing.Color.Red; 
    this.ResumeLayout(false); 
} 
//that outside: 
private System.Windows.Forms.Panel panel1; 
+1

¿Puedes publicar tu código? – ChrisF

+0

No repro con XP SP3 y .NET 2.0, lo siento. – Bobby

+0

¿Alguien puede intentar eso con .NET 4.0? – Episodex

Respuesta

9

He oído hablar de este problema antes, pero nunca me di cuenta de que estaba relacionado con la elección de TransparencyKey. Buen hallazgo Es casi seguro causado por Aero. Si está desactivado, el efecto se implementa mediante el uso de una superposición de hardware en el adaptador de video. Con esto habilitado, la característica de composición de la ventana de escritorio lo implementa. Por lo general, puede decir por un breve instante del color de transparencia antes de que DWM alcance y reemplace el área con los píxeles de las ventanas en el fondo. Desactivar DWM para su ventana puede solucionar el problema, pero también perderá los efectos de vidrio.

Puedo ver una pequeña rima o razón por el valor del color, parece bastante aleatorio para mí. Es difícil llamar a esto algo más que un error. Nunca me encontré con esto antes, siempre uso la misma clave de transparencia. Color.Fuchsia, un excelente color jodido. Recomendado.

+0

Gracias por su respuesta. Lo probé y tienes razón. Puedo hacer clic sin Aero habilitado. Ahora lo curioso es que hice uso de este error. Tengo una ventana transparente con la que no puedo hacer clic (para poder usar el evento OnMouseMove con ella) y la segunda con otra clave de transparencia con la que puedo hacer clic (lo que quiero). Ahora sé que sin Aero o XP no funcionará ... Afortunadamente es solo para mi uso personal;). – Episodex

+0

Hehe, sí, este error ha existido por un tiempo. Cuando no lo arreglan, se convierte en una característica que hace que nuestras vidas sean bastante difíciles. –

0

que tiene el mismo problema. Funcionará si su TransparencyKey es blanca.

Cuestiones relacionadas