textBox + focus & EventHandler

Odpowiedz Nowy wątek
2011-02-12 15:27
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?

Pozostało 580 znaków

2011-02-12 18:10
1

2.

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

Pozdro & poćwicz!

Pozostało 580 znaków

2011-02-12 18:25
1

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


"HUMAN BEINGS MAKE LIFE SO INTERESTING. DO YOU KNOW, THAT IN A UNIVERSE SO FULL OF WONDERS, THEY HAVE MANAGED TO INVENT BOREDOM."
Właśnie miałem pisać, bo sobie VS odpaliłem i sprawdzałem czy zadziała ;) - stfu 2011-02-12 18:26

Pozostało 580 znaków

2011-02-12 18:32
0

Drugi problem rozwiązany.

Co do pierwszego zrobiłem:

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

Ale to nie pomogło.

Pozostało 580 znaków

2011-02-12 23:14

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


Pozdro & poćwicz!

Pozostało 580 znaków

2011-02-12 23:25
0

Działa.

Dla potomnych ma być:

textBox1.SelectionStart = textBox1.Text.Length;

Bez -1 lata :)

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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