2009-03-02 59 views
6

En un cuadro de texto, ¿cómo puede evitar que se muestre el cursor parpadeante al hacer clic en él?Prevenir el parpadeo del cursor en el cuadro de texto

He leído en algunos foros que hay una llamada a una API en particular, pero cuando lo intenté en mi código, se produjo un error. Proporcione el código completo para este fin si es posible y avíseme si hay un evento particular donde se debe ejecutar el código.

Este cuadro de texto es parte de una ventana de formulario que estoy creando para la simulación de un lan messenger. Estoy usando C#. El formulario tiene dos cuadros de texto para parecerse al de Google Talk. Sería deseable evitar mostrar el cursor parpadeante en el cuadro de texto superior.

me trataron:

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

me sale el error: "DllImport no se pudo encontrar."

+0

Sírvanse proporcionar más información sobre este cuadro de texto y el lenguaje que se creó en un cuadro de texto de cacao nativo en OS X qué.? ¿Un cuadro de texto en un formulario en una página web html? ¿Un cuadro de texto en una aplicación win32? Un cuadro de texto gtk2? Un cuadro de texto BeOS? etc. – Nathan

+0

Bueno, este cuadro de texto es parte de una ventana de formulario que estoy creando para la simulación de un lan messenger. Estoy usando C#. El formulario tiene dos cuadros de texto para parecerse al de Google Talk y sería deseable evitar que se muestre el cursor parpadeante en el cuadro de texto superior. – Avik

+0

Edite la pregunta con su nueva información: las personas no la verán tan bien si está en los comentarios. –

Respuesta

6

Si quiere desactivar la edición en el cuadro de texto, establecen que es propiedad ReadOnly en true.

Si desea permitir la edición, pero aún oculta el símbolo de intercalación, llamar a la API de Win32 exactamente as specified:

[System.Runtime.InteropServices.DllImport("user32.dll")] 
static extern bool HideCaret(IntPtr hWnd); 

... 

HideCaret(myTextBox.Handle); 
+0

Este es el código que he encontrado antes también. El problema aquí es que se muestra un error diciendo que: "Error No se encontró el tipo o el nombre del espacio de nombres 'DllImport' (¿falta una directiva using o una referencia de ensamblado?) " ¿Hay alguna referencia específica hecha? – Avik

+0

esto funciona perfectamente, gracias! – Mike

+0

Agregar usando la declaración en la parte superior. using System.Runtime.InteropServices; shahkalpesh

0

Código VB.NET

Imports System.Runtime.InteropServices 

Public Class xxxxxxxxxxxxxxxxxxxxxx 

<DllImport("user32.dll")> 
    Private Shared Function HideCaret(ByVal hwnd As IntPtr) As Boolean 
    End Function 

............... 

Private Sub txtNotePreview_MouseMove(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtNotePreview.MouseMove, txtNotePreview.KeyPress 
     HideCaret(txtNotePreview.Handle) 
    End Sub 
+1

Probablemente deberías explicar un poco más. Proporcionar una solución es solo una parte de la respuesta. – albertjan

3

Hola, Prueba este código

public class CustomTextBox:System.Windows.Forms.TextBox 
{ 
    [System.Runtime.InteropServices.DllImport("user32")] 
    private static extern bool HideCaret(IntPtr hWnd); 

    public CustomTextBox() 
    { 
     TabStop = false; 

     MouseDown += new System.Windows.Forms.MouseEventHandler(CustomTextBox_MouseDown); 
    } 

    void CustomTextBox_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e) 
    { 
     HideCaret(this.Handle); 
    } 
} 
2

si coloca la función hideCaret dentro de Textc evento de suspensión, esto resolverá el problema.

[DllImport("user32.dll")] 
    static extern bool HideCaret(IntPtr hWnd); 

    private void textBox1_TextChanged(object sender, EventArgs e) 
    { 
     HideCaret(textBox1.Handle); 
    } 
1

he investigado para averiguar cómo emular barra de direcciones de Chrome Web (parcialmente) en un TextBox y reunieron código de aquí y en este one.

Funciona bien, primero Clic, selecciona todo el texto sin mostrar el cursor parpadeante, el truco es mostrar el cursor al hacer clic por segunda vez en el texto seleccionado, que es cómo se comporta la barra de direcciones web de Chrome . Aquí está el código:

[DllImport("user32.dll")] 
    static extern bool HideCaret(IntPtr hWnd); 

    private void textBox2_Enter(object sender, EventArgs e) 
    { 
     // Kick off SelectAll asyncronously so that it occurs after Click 
     BeginInvoke((Action)delegate 
     { 
      HideCaret(textBox2.Handle); 
      textBox2.SelectAll();    
     });   
    } 
+0

¡Esto es bastante interesante y útil! +1 – Kaitlyn

Cuestiones relacionadas