textBox + focus & EventHandler

0

Witam, piszę malutką grę polegającą na wpisywaniu wyrazów na ostatnią literę poprzedniego z tym, że mam problem.

Program działa tak:

  • Uruchamiamy program
  • Pobieram z bazy ostatnie 10 wyrazów
  • Pobieram ostatnią literę z ostatnio wprowadzonego wyrazu
  • Literę wpisuję do textBoxa i wywołuję textBox1.focus()

Tutaj pojawia się problem, bo kursor jest przed literą zamiast po niej.

Na textBox mam dodany event dokładniej KeyPressEventArgs - odpowiada on za przechwycenie wciśnięcia klawiasza ENTER, abym mógł przesłać zapytanie ze słowem do bazy.

Jeżeli słowa nie ma w słowniku SJP lub już wystąpiło w grze (słowa muszą być unikalne) wyświetlam odpowiedniego MessageBox poprzez złapanie odpowiedniego wyjątku, wtedy również czyszczę textBox'a i znów wywołuję .focus() - sytuacja się powtarza, kursor jest dodawany na początku zamiast na końcu.

Czy wie ktoś jak rozwiązać ten problem? Zależy mi na tym, ponieważ gra przestałaby denerwować. ;)


Pytanie drugie

Jak pisałem wyżej mam event'a KeyPressEventArgs, wiem jak odczytać czy dany klawisz to np. Backspace - tylko chciałbym uniemożliwić usuwanie pierwszej litery (ma być "na stałe").

Czyli powiedzmy:


private void mojaFunkcja(object sender, JakisEventHandler e) {
if (e.KeyChar == (char) Keys.Back) {
if (textBox1.Text.Length == 1) {
return false;
}else{
return true;
}
}
}

Jak zrobić coś takiego jak w/w przykładowym kodzie?

1
if ( e.KeyChar == (char)Keys.Back && (textBox1.TextLength == 1) )
{
   e.Handled = true;
}
1

Jak rozumiem, trzeba ustawić textBox1.SelectionStart na textBox1.Length - 1.

0

Drugi problem rozwiązany.

Co do pierwszego zrobiłem:

textBox1.SelectionStart = textBox1.Text.Length - 1;
                textBox1.Focus();

Ale to nie pomogło.

1

Zmień kolejność. Najpierw focus(), później ustawiasz SelectionStart.

0

Działa.

Dla potomnych ma być:

textBox1.SelectionStart = textBox1.Text.Length;

Bez -1 lata :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1