2011-09-14 19 views
5

Voglio disabilitare la selezione del testo e cliccando nel mezzo di testo in un controllo TextBox, ma l'utente deve essere in grado di entrare in questo TextBox e scrivere alla fine del testo precedente, quindi non posso rendere ReadOnly o Enable = false.Come disattivare la selezione su un TextBox

cerco di gestire MouseDown e procedere come segue:

input.Select(input.Text.Length, 0); 

Aiuta con l'immissione di un cursore a metà del testo, ma l'utente ancora può fare una selezione dalla fine.

Realizzo anche un evento MessageBox() su MouseDown, ma in questo caso l'utente non può fare clic su TextBox e scrivere nulla.

L'ultimo tentativo è stato quello di impostare un focus() in un altro controllo e mettere a fuoco di nuovo, dopo un periodo di tempo, ma non ha funzionato affatto. L'utente può ancora effettuare una selezione.

Come posso farlo?

+2

Un secondo testo che aggiunge solo per il primo testo? – LarsTech

risposta

2

Se si adatta all'interfaccia utente/modello utente, un altro approccio consiste nell'utilizzare due caselle di testo: una di sola lettura con il testo precedente che l'utente può vedere e agire (se questo è qualcosa che deve fare) e un uno modificabile per il nuovo testo insieme a un pulsante per commettere il nuovo testo nella casella di testo di sola lettura (e strato di persistenza).

Questo approccio non solo è senza dubbio più user-friendly — casella modificabile è completamente modificabile e non solo "appendable", che ottiene di confusione quando l'utente preme Backspace — ma richiede anche meno di combattimento con il quadro per fare le scatole fanno quello che ti serve.

5

Che ne dite di questo per Click evento

Edit: anche fare lo stesso per DoubleClick e MouseLeave per coprire tutti i casi. Puoi avere un gestore di eventi comune.

private void textBox1_Click(object sender, EventArgs e) 
    { 
     ((TextBox) sender).SelectionLength = 0; 
    } 
+0

Quasi. Quando la selezione 'MouseUp' scomparire, ma ancora utente può iniziare a selezionare qualcosa (blu evidenziazione) – Pieniadz

+1

Aggiungi' MouseMove' alla lista di eventi che cancellare la selezione –

1

Tu non sei molto lontano con il vostro gestore di eventi MouseDown, ma probabilmente è meglio prendere MouseUp, in quanto questo è l'evento che il fuoco quando hanno finito di selezione.

alternativa, è possibile catturare l'evento SelectionChanged.

basta mettere la:

input.Select (input.Text.Length, 0);

codice

in uno qualsiasi di questi gestori di eventi.

+2

Non c'è 'SelectionChanged' per WinForms' TextBox'. –

Problemi correlati