2009-01-27 16 views
6

Digamos que tengo un control y quiero evitar que se edite.¿Cómo se desactivan .NET Winforms Controls sin cambiar su apariencia?

Establecer la propiedad Enabled del control en False funcionará, pero la apariencia del control cambiará en consecuencia, generalmente a una fuente negra sobre gris difícil de leer. Cuando la legibilidad aún es importante, este es un problema real.

Para un cuadro de texto, hay algunas correcciones obvias:

Textbox1.BackColor = Color.White; 

o

Textbox1.ReadOnly= true; // instead of setting Enabled to false 

pero por desgracia esto no funcionará para cada controles (por ejemplo, botones de radio)

Otro La solución es dejar intacta la propiedad Enabled y suscribirse al evento de enfoque como este (pero esta no es una solución realmente elegante)

this.Textbox1.Enter += new System.EventHandler(this.Textbox1_Enter); 

    private void Textbox1_Enter(object sender, EventArgs e) 
    { 
     Textbox1.FindForm().ActiveControl = null; 
    } 

¿Has visto otras formas de solucionar este problema? (y me refiero a soluciones del mundo real; por supuesto, puede capturar una captura de pantalla del control y mostrar la copia sobre el control ...: p)

Respuesta

3

Existe un argumento de que interferir con el comportamiento estándar de Windows es confuso para el usuario, pero aparte de eso he visto esto hecho antes, aunque más comúnmente en C++. Puede subclasificar el control y manejar mensajes de pintura usted mismo. Cuando el control está habilitado, simplemente delegue el dibujo a la clase base. Cuando el control está deshabilitado, puede dejar que la clase base se dibuje sola y luego hacer un dibujo personalizado sobre la parte superior o puede dibujar todo usted mismo. Recomiendo encarecidamente la primera de estas opciones.

0

Algunos controles se pueden configurar como ReadOnly, lo que los habilita, pero no puede ser cambiado. Esto puede ser lo que estás buscando.

Dicho esto, es probable que te sientas dolido cuando tus usuarios comiencen a confundirse porque parece que deberían poder editar los controles, pero no pueden. Hay una razón por la que cambian su apariencia visual: es para comunicar el estado del sistema al usuario. Lidia con eso y pueden terminar muy confundidos.

+0

Lo publiqué antes de que terminara la pregunta. –

+1

ahah! Sin embargo, otra reputación de francotirador :) – Brann

0

Si un control está deshabilitado/solo lectura, entonces realmente necesita verse deshabilitado/solo lectura. De lo contrario, confundirá por completo al usuario.

Existen muy buenas razones por las cuales los Controles de Windows se comportan de la manera en que lo hacen y usted realmente desea seguir siendo coherente con otras interfaces de Windows. Cuando alguien está usando una aplicación de Windows, tiene ciertas expectativas de cómo debería verse y actuar.

Si se desvía de estas expectativas, la mayoría de las veces el usuario va a pensar que su software es una basura.

+1

Estoy de acuerdo con su punto, PERO en algunos casos, realmente desea deshabilitar el control sin alterar su apariencia (especialmente porque el aspecto "deshabilitado" a menudo es difícil de leer). Es por eso que la propiedad ReadOnly está integrada en el marco para algunos controles, ¿no es así? – Brann

+1

Sí, y la propiedad de solo lectura también provoca un cambio visual en el control, es solo un cambio visual diferente. –

0

Normalmente, sí, no quiero cambiar el comportamiento predeterminado de Windows.

Pero tengo un caso en el que estoy deshabilitando muchos controles en una página, generalmente por menos de un segundo, para evitar algunos problemas de subprocesamiento cruzado en una aplicación multiproceso. Esto provoca grandes problemas de parpadeo a medida que el usuario avanza, por ejemplo, una vista en árbol o un cuadro de lista. NO cambiar su apariencia en este caso es algo deseable.

Sin embargo, cuando los controles están deshabilitados por otros motivos, QUIERO que su apariencia refleje su estado activado/desactivado.

El parpadeo de los estados activado/desactivado en el caso de que sea solo momentáneo resulta en una percepción mucho más negativa del software que la supresión del cambio en la apariencia de los controles desactivados para evitar el parpadeo de muchas partes de la forma lo haría.

Cuestiones relacionadas