2008-09-04 15 views

Respuesta

10

Puede hacerlo a través de una llamada Win32

[DllImport("user32.dll")] 
static extern bool HideCaret(IntPtr hWnd); 
public void HideCaret() 
{ 
    HideCaret(someTextBox.Handle); 
} 
+2

No se olvide 'using System.Runtime.InteropServices;' y 'ShowCaret (IntPtr hWnd);' – Sam

1

Si deshabilita el cuadro de texto (establecer 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.

Tenga en cuenta, el anular manualmente los colores hará que su 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.

+1

No, no es seleccionable (o desplazable) si el cuadro de texto está deshabilitado. Probablemente estés pensando en hacerlo de solo lectura. –

-4

AFAIK, esto no se puede hacerse. El control TextBox es un control divertido porque en realidad tiene un lote 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.

Me temo que no puede ser capaz de hacer lo que desea hacer :(

4

Cuando se utiliza la llamada Win32 no se olvide de ocultar el cursor en el evento GotFocus del cuadro de texto.

+2

¡Gracias por esto! Lo intenté todo, incluso en el evento Enter, pero no funciona, ¡pero este hace el trabajo! – ViFer

3

simplemente para la corrección, que necesitaba dicha funcionalidad para el uso con un DevExpress WinForms TextEdit control.

que ya hacen provid e a 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, basta con utilizar la clase derivada en lugar de la clase original TextEdit en el código y lo llaman DoHideCaret() en cualquier lugar, por ejemplo, en el constructor de su formulario que contiene el control de edición de texto.

Quizás esto sea útil para alguien en el futuro.

Cuestiones relacionadas