Come posso nascondere l'accento circonflesso di input in un System.Windows.Forms.TextBox?

StackOverflow https://stackoverflow.com/questions/44131

  •  09-06-2019
  •  | 
  •  

Domanda

Devo visualizzare un messaggio di lunghezza variabile e consentire che il testo sia selezionabile.Ho creato TextBox ReadOnly che non consente la modifica del testo, ma l'accento circonflesso viene comunque visualizzato.

Il cursore di input lampeggiante crea confusione.Come lo nascondo?

È stato utile?

Soluzione

Puoi farlo tramite una chiamata win32

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

Altri suggerimenti

Quando usi la chiamata win32 non dimenticare di nascondere il cursore nell'evento GotFocus della casella di testo.

Solo per completezza, avevo bisogno di tale funzionalità da utilizzare con a DevExpress WinForms TextEdit controllo.

Forniscono già a ShowCaret e un HideCaret metodo, purtroppo sono protetti.Pertanto ho creato una classe derivata che fornisce la funzionalità.Ecco il codice 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();
        }
    }
}

Per utilizzare il codice è sufficiente utilizzare la classe derivata invece dell'originale TextEdit inserisci il tuo codice e chiama DoHideCaret() ovunque, ad es.nel costruttore del modulo che contiene il controllo di modifica del testo.

Forse questo sarà utile a qualcuno in futuro.

Se disabiliti la casella di testo (set Enable=false), il testo in esso contenuto è ancora scorrevole e selezionabile.Se non ti piace la presentazione visiva di una casella di testo disabilitata (solitamente con sfondo grigio) puoi sovrascrivere manualmente i colori.

Attenzione, la sovrascrittura manuale dei colori renderà il tuo modulo/controllo strano sui sistemi che non utilizzano le impostazioni predefinite di colore/tema.Non dare per scontato che, poiché il tuo controllo è bianco, il controllo di tutti sarà bianco.Ecco perché dovresti sempre utilizzare i colori di sistema quando possibile (definiti nel file System.Drawing.SystemColors enumerazione) come SystemColors.ControlLight.

Per quanto ne so, questo non può essere fatto.Il controllo TextBox è un controllo divertente perché in realtà ha un file quantità di comportamento che non può essere modificato a causa del modo in cui si collega al sistema operativo.Questo è il motivo per cui molte delle fantastiche caselle di testo personalizzate sono scritte da zero.

Temo che potresti non essere in grado di fare quello che desideri :(

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top