2009-03-02 8 views
6

In una casella di testo, come si può impedire la visualizzazione del cursore lampeggiante quando si fa clic su di esso?Previene il cursore lampeggiante nella casella di testo

Ho letto in alcuni forum che c'è una chiamata a una particolare api ma quando ho provato nel mio codice, è stato mostrato un errore. Si prega di fornire il codice completo per questo scopo, se possibile, e di farmi sapere se c'è un particolare evento in cui il codice deve essere eseguito.

Questa casella di testo è parte di una finestra modulo che sto creando per la simulazione di una lan messenger. Sto usando C#. Il modulo ha due caselle di testo per assomigliare a quello di Google Talk. Sarebbe auspicabile evitare di visualizzare il cursore lampeggiante nella casella di testo superiore.

ho provato:

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

ottengo l'errore: "DllImport non è stato trovato"

+0

Si prega di fornire ulteriori informazioni su questo campo testo e che lingua è stato creato in un cacao testo nativo su OS X.? Una casella di testo in un modulo su una pagina Web html? Una casella di testo in un'app Win32? Una casella di testo gtk2? Una casella di testo BeOS? ecc. – Nathan

+0

Bene, questa casella di testo fa parte di una finestra del modulo che sto creando per la simulazione di una lan messenger. Sto usando C#. Il modulo ha due caselle di testo per assomigliare a quella di Google Talk e sarebbe auspicabile evitare di visualizzare il cursore lampeggiante nella casella di testo superiore. – Avik

+0

Modifica la domanda con le tue nuove informazioni - le persone non la vedranno anche se sono nei commenti. –

risposta

6

Se si vuole impedire la modifica del testo, impostare è ReadOnly proprietà su true.

Se si desidera consentire l'editing, ma ancora nascondere il cursore, chiamare l'API Win32 esattamente as specified:

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

... 

HideCaret(myTextBox.Handle); 
+0

Questo è il codice Il problema qui è che viene visualizzato un errore che dice: "Errore Impossibile trovare il nome dello spazio dei nomi 'DllImport' (manca una direttiva using o un riferimento assembly?) " C'è qualche riferimento specifico a fatto ?? – Avik

+0

funziona perfettamente, grazie! – Mike

+0

Aggiungi istruzione using in alto. using System.Runtime.InteropServices; shahkalpesh

0

VB.NET Codice

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

Probabilmente dovresti spiegare un po 'di più. Fornire una soluzione è solo una parte della risposta. – albertjan

3

Ciao, Prova questo codice

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

se si inserisce la funzione hideCaret all'interno di Textc evento di hange, questo risolverà il problema.

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

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

ho studiato per trovare il modo di emulare barra degli indirizzi web di Chrome (in parte) su un TextBox e riuniti il ​​codice sia da qui e questo one.

Funziona bene, prima Clic, seleziona tutto il testo senza mostrare il cursore lampeggiante, il trucco è quello di rendere il cursore mostra stessa quando si clicca una seconda volta sul testo selezionato, che è come barra degli indirizzi web di Chrome si comporta . Ecco il codice:

[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

Questo è in realtà abbastanza interessante e utile! +1 – Kaitlyn