CheckBox - RadioButton ReadOnly

06/07/2004 - 14:04 por Anonimo | Informe spam
Hola, una cuestión a ver si es posible.

Quisiera saber cómo se pueden crear CheckBox -
RadioButton que sean ReadOnly, quizá no tenga sentido ???

Por ejemplo, se daría este caso, que tengas un checkbox
con un valor (activo o no) pero no quieres que el usuario
pulse el checkbox y cambie el valor.

No quiero el efecto Enable = false, porque me cambiaría
el color de fondo, por eso sería mejor algo así como
ReadOnly.

Intuyo que habría que heredar de las clases padre y
crearse controles específicos, pero cómo podría crear esa
funcionalidad ?

Gracias a todos por vuestra atención. Un saludo cordial.

Preguntas similare

Leer las respuestas

#1 Yachakuq
06/07/2004 - 15:52 | Informe spam
Hola:
Exacto, lo haces así:
using ...
namespace ClasesPropias
{
#region CheckBox
/// <summary>
/// Representa un control de CheckBox de Windows
personalizado.
/// </summary>
public class MiCheckBox :
System.Windows.Forms.CheckBox
{
#region Propiedad
/// <summary>
/// Variable que obtiene o establece un
valor que indica si el control es de sólo lectura.
/// </summary>
private bool readOnly;

/// <summary>
/// Obtiene o establece un valor que
indica si el control es de sólo lectura.
/// </summary>
[Category("Propias")]
[Description("Indica si el control es de
sólo lectura.")]
[DefaultValue(false)]
public bool ReadOnly
{
get
{
return readOnly;
}
set
{
readOnly = value;
}
}
#endregion Propiedad

#region Override
protected override void WndProc(ref
Message m)
{
if (this.ReadOnly && (m.Msg ==
0x0201 || m.Msg == 0x0203))
{
return;
}
base.WndProc(ref m);
}
#endregion Override
}
#endregion CheckBox
}
No te olvides de reemplazar System.Windows.Forms.CheckBox
por ClasesPropias.MiCheckBox (2 veces) en tu formulario
que contiene el control.
Igualmente haces con el RadioButton.

Saludos.
Yachakuq
Respuesta Responder a este mensaje
#2 Pedro Luna Montalvo
07/07/2004 - 15:43 | Informe spam
Hmmm
No tengo mi VS.NET a mano ( :( ) pero, acaso esto no solamente trataria los
mensajes del raton, pero no evitaria que el usuario lo cambie por teclado,
es decir, dandole el enfoque al CheckBox y presionando la Barra
Espaciadora??

Saludos
Pedro Luna, MVP
Gye, Ecu

"Yachakuq" escribió en el mensaje
news:272f301c46360$6e4a9b90$
Hola:
Exacto, lo haces así:
using ...
namespace ClasesPropias
{
#region CheckBox
/// <summary>
/// Representa un control de CheckBox de Windows
personalizado.
/// </summary>
public class MiCheckBox :
System.Windows.Forms.CheckBox
{
#region Propiedad
/// <summary>
/// Variable que obtiene o establece un
valor que indica si el control es de sólo lectura.
/// </summary>
private bool readOnly;

/// <summary>
/// Obtiene o establece un valor que
indica si el control es de sólo lectura.
/// </summary>
[Category("Propias")]
[Description("Indica si el control es de
sólo lectura.")]
[DefaultValue(false)]
public bool ReadOnly
{
get
{
return readOnly;
}
set
{
readOnly = value;
}
}
#endregion Propiedad

#region Override
protected override void WndProc(ref
Message m)
{
if (this.ReadOnly && (m.Msg =0x0201 || m.Msg == 0x0203))
{
return;
}
base.WndProc(ref m);
}
#endregion Override
}
#endregion CheckBox
}
No te olvides de reemplazar System.Windows.Forms.CheckBox
por ClasesPropias.MiCheckBox (2 veces) en tu formulario
que contiene el control.
Igualmente haces con el RadioButton.

Saludos.
Yachakuq
Respuesta Responder a este mensaje
#3 Yachakuq
07/07/2004 - 18:36 | Informe spam
Hola Pedro:
Tienes razón, para ello se aumenta este código a la clase:
public override bool PreProcessMessage(ref Message m)
{
if (this.ReadOnly)
{
return true;
}
return base.PreProcessMessage(ref m);
}
Saludos.
Yachakuq
Hmmm
No tengo mi VS.NET a mano ( :( ) pero, acaso esto no


solamente trataria los
mensajes del raton, pero no evitaria que el usuario lo


cambie por teclado,
es decir, dandole el enfoque al CheckBox y presionando la


Barra
Espaciadora??

Saludos
Pedro Luna, MVP
Gye, Ecu

"Yachakuq" escribió


en el mensaje
news:272f301c46360$6e4a9b90$
Hola:
Exacto, lo haces así:
using ...
namespace ClasesPropias
{
#region CheckBox
/// <summary>
/// Representa un control de CheckBox de Windows
personalizado.
/// </summary>
public class MiCheckBox :
System.Windows.Forms.CheckBox
{
#region Propiedad
/// <summary>
/// Variable que obtiene o establece un
valor que indica si el control es de sólo lectura.
/// </summary>
private bool readOnly;

/// <summary>
/// Obtiene o establece un valor que
indica si el control es de sólo lectura.
/// </summary>
[Category("Propias")]
[Description("Indica si el control es de
sólo lectura.")]
[DefaultValue(false)]
public bool ReadOnly
{
get
{
return readOnly;
}
set
{
readOnly = value;
}
}
#endregion Propiedad

#region Override
protected override void WndProc(ref
Message m)
{
if (this.ReadOnly && (m.Msg =>0x0201 || m.Msg == 0x0203))
{
return;
}
base.WndProc(ref m);
}
#endregion Override
}
#endregion CheckBox
}
No te olvides de reemplazar System.Windows.Forms.CheckBox
por ClasesPropias.MiCheckBox (2 veces) en tu formulario
que contiene el control.
Igualmente haces con el RadioButton.

Saludos.
Yachakuq


.

email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida