Pregunta

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 el cursor de entrada aún se muestra.

El símbolo de intercalación de entrada parpadeante es confuso.¿Cómo lo oculto?

¿Fue útil?

Solución

Puedes hacerlo a través de una llamada win32.

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

Otros consejos

Cuando utilice la llamada win32, no olvide ocultar el cursor en el evento GotFocus del cuadro de texto.

Para completar, necesitaba dicha funcionalidad para usar con un DevExpress WinForms TextEdit control.

Ya proporcionan un ShowCaret y un HideCaret método, desafortunadamente 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 original TextEdit clase en su código y llame DoHideCaret() en cualquier lugar, p.e.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.

Si desactiva el cuadro de texto (establecer Enable=false), el texto que contiene aún se puede desplazar y seleccionar.Si no le gusta la presentación visual de un cuadro de texto deshabilitado (generalmente con fondo gris), puede anular manualmente los colores.

Tenga en cuenta que anular manualmente los colores hará que su formulario/control se vea extraño en sistemas que no utilizan 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 que sea posible debes usar los colores del sistema (definidos en el System.Drawing.SystemColors enumeración) como SystemColors.ControlLight.

AFAIK, esto no puedo estar hecho.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 accede al sistema operativo.Es por eso que muchos de los interesantes cuadros de texto personalizados se escriben desde cero.

Me temo que es posible que no puedas hacer lo que deseas :(

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top