2011-09-14 30 views
5

Chcę wyłączyć zaznaczanie tekstu i klikanie w środku tekstu w TextBox, ale użytkownik musi być w stanie wprowadzić ten TextBox i napisać na końcu wcześniejszego tekstu, więc nie mogę uczynić go ReadOnly lub Enable = false.Jak wyłączyć zaznaczenie na TextBox

próbuję obsłużyć MouseDown i wykonaj następujące czynności:

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

Pomaga umieszczając kursor w środku tekstu, ale użytkownik nadal może dokonać wyboru od końca.

Wykonuję również zdarzenie MessageBox() na MouseDown, ale w tym przypadku użytkownik nie może kliknąć pola tekstowego i pisać niczego.

Ostatnią próbą było ustawienie focus() w innym sterowaniu i ponowne ogniskowanie po pewnym czasie, ale w ogóle nie działało. Użytkownik nadal może dokonać wyboru.

Jak mogę to zrobić?

+2

Drugie pole tekstowe dołączane tylko do pierwszego pola tekstowego? – LarsTech

Odpowiedz

2

Jeśli pasuje do interfejsu użytkownika/modelu użytkownika, innym rozwiązaniem jest użycie dwóch pól tekstowych: tylko tekst do odczytu z poprzednim tekstem, który użytkownik może zobaczyć i działać (jeśli jest to coś, co musi zrobić) i edytowalny dla nowego tekstu wraz z przyciskiem, aby zatwierdzić nowy tekst do pola tekstowego tylko do odczytu (i warstwy trwałości).

Takie podejście jest nie tylko prawdopodobnie bardziej przyjazny dla użytkownika — edytowalny pudełko jest całkowicie edytowalna zamiast po prostu „appendable”, który staje się kłopotliwe, gdy użytkownik wciśnie Backspace — ale wymaga również mniej walki z ramami, aby pudełka zrobić czego potrzebujesz.

5

Jak o tym na Click imprezy

EDIT: również zrobić to samo dla DoubleClick i MouseLeave aby objąć wszystkie przypadki. Możesz mieć wspólną procedurę obsługi zdarzeń.

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

Prawie. Kiedy wybór 'MouseUp' zniknie, ale nadal użytkownik może zacząć wybierać coś (niebieskie podświetlenie) – Pieniadz

+1

Dodaj' MouseMove' do listy zdarzeń, które wyczyszczą zaznaczenie –

1

Nie jesteś daleko z obsługi zdarzenia MouseDown, ale chyba lepiej złapać mouseUp, jako że jest to wydarzenie, które będą uruchamiane po ich zakończeniu wybierania.

Alternatywnie można złapać zdarzenie SelectionChanged.

Wystarczy umieścić:

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

w dowolnej z tych procedur obsługi zdarzeń.

+2

Nie ma 'SelectionChanged' dla WinForm' TextBox'. –

Powiązane problemy