Όχι, δεν κατάλαβες καλά.
Το Event KeyPress(object sender, KeyEventArgs) διαβάζει KeyData που είναι αυστηρά χαρακτήρες, ποτέ δε θα καταλάβει ότι πάτησες βελάκι. Για αυτό το σκοπό έχεις 2 λύσεις:
1) Θα θέσεις το CausesValidation όλων των Controls στη φόρμα σου τα οποία έχουν αυτό το property (τα οποία κλέβουν το focus με το βελάκι) σε false, και θα χρησιμοποιήσεις το KeyDown του αντίστοιχου control, το οποίο θα σου κάνει forward σε μια άλλη private συνάρτηση - δε θα πιάσεις όμως ποτέ το γεγονός ότι ο χρήστης πάτησε βελάκι.
2) Πιο γενική λύση είναι να κατέβεις ένα επίπεδο χαμηλότερα και να κάνεις handle το Win32 keystroke event γράφωντας την εξής συνάρτηση στην φόρμα σου:
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
return base.ProcessCmdKey(ref msg, keyData);
}
Έτσι μπορείς να πιάσεις το βελάκι. Ίσως όμως καλύτερα να σκεφτείς πρώτα γιατί είναι τόσο απαραίτητο στο χρήστη σου να καταφύγει σε τέτοιο τρόπο εισαγωγής δεδομένων,
μια και τα Windows Applications είναι πλούσια σε γραφικές User Interface επιλογές, για να μη χρειάζονται τα παλιομοδίτικα DOS keystrokes.
Ένα tip: αν γράψεις "override" και spacebar στο Visual Studio σου ανοίγει παράθυρο AutoComplete με τη συλλογή από όλες τις overload που μπορείς να κάνεις
Για πειραματισμό (ή αλλιώς "το καλό το παλικάρι ξέρει κι άλλο μονοπάτι"), μπορείς να βάλεις ΟΛΑ τα event handlers που ειπώθηκαν παραπάνω στον κώδικά σου και να βάλεις ένα breakpoint στο καθένα. Όταν κάνεις debug θα δεις με ποια απ'όλα και με ποιά σειρά καλούνται.
Panagiotis Georgiadis
HBM Netherlands B.V.
www.twitter.com/HimWithCurls