pstavros wrote: |
Σ' ευχαριστώ.
Αυτό πρέπει να γίνεται σε κάθε πεδίο (Textbox) στην φόρμα. Δεν υπάρχει κάτι πιο γενικό. π.χ. για πολλά πεδία σε μία φόρμα.
|
|
Για πιο γενικό έχεις δύο λύσεις αλλά είναι κομματάκι πιο σύνθετες από το απλό copy/paste που μπορείς να κάνεις με την παραπάνω λύση.
Η πρώτη είναι να πιάνεις το event σε επίπεδο φόρμας, δίνοντας στο property "KeyPreview" της φόρμας τιμή True. Κατόπιν, σε ένα handler, μπορείς να γράψεις κώδικα που θα προχωράει στο επόμενο control. Είναι ακριβώς ο κώδικας που σου έδωσε ο Χρήστος μόνο που επειδή θα ισχύει για όλα τα controls θα πρέπει να βρεις έναν τρόπο να εξαιρέσεις αυτά που δεν θες να υπακούουν στον κανόνα Enter=TAB. Αυτό μπορεί να γίνει ελέγχοντας για παράδειγμα το tag property του active control. Έτσι λοιπόν ο προηγούμενος κώδικας γίνεται ως εξής:
Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown
If Me.ActiveControl.Tag <> "Next" Then
Console.WriteLine(Me.ActiveControl.Name)
Exit Sub
End If
If e.KeyCode = Keys.Enter Then SendKeys.Send("{TAB}")
If e.KeyCode = Keys.Up Then SendKeys.Send("+{TAB}")
If e.KeyCode = Keys.Down Then SendKeys.Send("{TAB}")
End Sub
Όμως η πιο κομψή (αλλά και πιο advanced) λύση είναι να προσθέσεις μια ρουτίνα στο Load event της φόρμας (ή στον constructor) η οποία θα κάνει AddHandler statements δηλαδή ουσιαστικά θα προσθέτεις δυναμικά για κάθε control μια KeyDown procedure την οποία θα έχεις προετοιμάσει. Δηλαδή χοντρικά κάτι τέτοιο:
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
AddHandlers()
End Sub
Private Sub AddHandlers()
AddHandler TextBox1.KeyDown, AddressOf KeyDownManager
AddHandler TextBox3.KeyDown, AddressOf KeyDownManager
AddHandler TextBox4.KeyDown, AddressOf KeyDownManager
'Εναλλακτικά αυτό για να αποφύγεις να προσθέτεις χειροκίνητα τα controls με
' πολλά AddHandler statements
For Each ctrl As Control In Me.Controls
If ctrl.Tag = "Next" Then
AddHandler ctrl.KeyDown, AddressOf KeyDownManager
End If
Next
End Sub
Private Sub KeyDownManager(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs)
If e.KeyCode = Keys.Enter Then SendKeys.Send("{TAB}")
If e.KeyCode = Keys.Up Then SendKeys.Send("+{TAB}")
If e.KeyCode = Keys.Down Then SendKeys.Send("{TAB}")
End Sub
'Μην ξεχάσεις να κάνεις τα αντίστοιχα RemoveHandler στο destructor της φόρμας.
Vir prudens non contra ventum mingit