winforms - studio - ¿Cómo oculto el cursor de entrada en un System.Windows.Forms.TextBox?
textbox visual studio (5)
AFAIK, esto no se puede hacer. El control TextBox es un control divertido porque en realidad tiene un montón de comportamiento que no se puede modificar debido a la forma en que se conecta al sistema operativo. Esta es la razón por la cual muchos de los geniales cuadros de texto personalizados se escriben desde cero.
Temo que no puedas hacer lo que deseas hacer :(
Necesito mostrar un mensaje de longitud variable y permitir que el texto sea seleccionable. He creado TextBox ReadOnly, que no permite editar el texto, pero aún se muestra el cursor de entrada.
El cursor de entrada parpadeante es confuso. ¿Cómo lo oculto?
Si deshabilita el cuadro de texto (establezca Enable=false
), el texto aún puede desplazarse y seleccionarse. Si no te gusta la presentación visual de un cuadro de texto desactivado (generalmente, fondo gris), puedes anular manualmente los colores.
Se advirtió, reemplazar manualmente los colores hará que tu formulario / control se vea raro en los sistemas que no usan la configuración predeterminada de color / tema. No asuma que debido a que su control es blanco, el control de todos será blanco. Es por eso que siempre debe usar los colores del sistema siempre que sea posible (definidos en la enumeración System.Drawing.SystemColors
) como SystemColors.ControlLight
.
Al utilizar la llamada a win32, no olvide ocultar el cursor en el evento GotFocus de la caja de texto.
Puedes hacerlo a través de una llamada win32
[DllImport("user32.dll")]
static extern bool HideCaret(IntPtr hWnd);
public void HideCaret()
{
HideCaret(someTextBox.Handle);
}
Solo para completar, necesitaba una funcionalidad para usar con un control DevExpress WinForms TextEdit
.
Ya proporcionan un ShowCaret
y un método HideCaret
, lamentablemente están protegidos. Por lo tanto, creé una clase derivada que proporciona la funcionalidad. Aquí está el código completo:
public class MyTextEdit : TextEdit
{
private bool _wantHideCaret;
public void DoHideCaret()
{
HideCaret();
_wantHideCaret = true;
}
public void DoShowCaret()
{
ShowCaret();
_wantHideCaret = false;
}
protected override void OnGotFocus(EventArgs e)
{
base.OnGotFocus(e);
if (_wantHideCaret)
{
HideCaret();
}
}
}
Para usar el código, simplemente use la clase derivada en lugar de la clase TextEdit
original en su código y llame a DoHideCaret()
cualquier lugar, por ejemplo, en el constructor de su formulario que contiene el control de edición de texto.
Tal vez esto sea útil para alguien en el futuro.