2011-04-05 26 views
5

quiero hacer textBox un # .NET fondo transparente c Visual Studio está cometiendo un error si se define Propiedadescuadro de texto con un fondo transparente

+3

¿Podría elaborar y mostrar su código? –

+0

Solo quiero integrar gráficos y poner la imagen transparente en el cuadro de texto que oculta los gráficos – shlomi

+0

Disculpa, este comentario no está sirviendo. ¿Qué intentaste? ¿A qué error y Propiedades te refieres? –

Respuesta

4

poner esto en el constructor:

SetStyle(ControlStyles.SupportsTransparentBackColor, true); 

La necesidad de clases para habilitar el estilo transparente. (Por alguna razón, no es compatible por defecto).

public class MyControl : System.Windows.Forms.UserControl 
{ 
     public MyControl() 
     { 
      // Create visual controls 
      InitializeComponent(); 
      SetStyle(ControlStyles.SupportsTransparentBackColor, true); 
     } 
} 

O si no es un control personalizado:

mycontrolObject.SetStyle(ControlStyles.SupportsTransparentBackColor, true); 

Más sobre Control.SetStyle Method

Otros Control Styles

+0

¿Puedes explicarme más? – shlomi

+0

He agregado algunas palabras –

+2

Esto no funcionará para un TextBox. .NET TextBox es solo un contenedor para el antiguo control Win32, por lo que tendrá que hacer algún tipo de subclasificación. – HABJAN

2

Ésta no es una tarea fácil. El control .Net TextBox es un envoltorio alrededor del control de Edición de Win32, por lo que deberá hacer una subclasificación para lograr la transparencia del fondo.

Tome un vistazo a este ejemplo: AlphaBlendTextBox - A transparent/translucent textbox for .NET

+4

Ese proyecto de código es como un virus. No es un cuadro de texto, simplemente se ve como uno. –

+0

@HansPassant ¿puedes confirmar que es un virus? o simplemente no está impresionado con la implementación? –

+1

@Jeremy - es un código que se duplica porque se ve atractivo pero siempre tiene problemas para los usuarios. –

2

he encontrado una solución para este problema, que tengo por mi cuenta. La mayor parte de lo que he leído aquí es cierto. Y los enfoques "a la" AlphaBlendTextBox son demasiado complejos o consumen demasiado tiempo para algunos entornos, que ya están muy cargados.

Supongamos que tiene un determinado color de fondo y una imagen determinada o lo que quiera ver a través del control RichTextBox. Esto es lo que he hecho (resumido):

  1. en el formulario principal, se coloca la imagen, el texto, botones o lo que sea como se proyecta, con el color de fondo apropiado y/o imagen
  2. crear un nuevo forma y posición que siempre que sea apropiado
  3. conjunto de esta nueva forma TransparencyKey a SystemColors.InactiveBorder
  4. hacerse cargo de este formulario de propiedades fronterizas (FormBorderStyle a FormBorderStyle.None; ControlBox, MinimizeBox, MaximizeBox y ShowIcon a false, TopMost a true, StartPosition a FormStartPosition.Manual, SizeGripStyle a SizeGripStyle.Hide), por lo que no hay estructuras de forma visible
  5. crean un RichTextBox con el mismo tamaño de la forma y situados en la esquina superior izquierda
  6. conjunto de esta caja BackColor a SystemColors.InactiveBorder (? recordar la TransparencyKey) y su BorderStyle en Ninguno, así
  7. cuidar de los contenidos de cuadro de texto: Color (s), fuente (s) y las cuerdas
  8. sincronizar esta forma la visibilidad con todo lo que necesita y .. . voilà! ¡Puede ver el fondo de su aplicación a través de lo que escriba y edite en el cuadro de texto!

No puedo pretender que este enfoque se adapte a todos, pero es mucho más simple que otros que he visto y, siempre que pueda seguir así, prefiero las soluciones más simples.

Por supuesto, cuando cierras el formulario principal, debes ocuparte del formulario secundario, pero esto es bastante básico para ti, ¿no?

¡Disfrútalo!

+0

Había meditado algo así, pero los pasos 3 + 6 nunca se me pasaron por la mente. ¿Así que funciona para ti? – TaW