Τα πράγματα δεν είναι και τόσο απλά. Τα KeyDown, KeyPress, KeyUp events αφορούν το grid, όχι τα κελιά του. Για να μπορέσεις να πιάσεις events στα ίδια τα κελιά έχεις δύο επιλογές:
1. Κάνεις το KeyPreview της φόρμας True και χειρίζεσαι το KeyDown της φόρμας. Απλό γρήγορο και βρώμικο.
2. Χειρίζεσαι τα events της στήλης. Για να το κάνεις αυτό πρέπει να έχεις ορίσει DataTableGridStyle για το grid.
'in formload
Me.dataGrid2.DataSource = Me.dataSet11.Customers ' set the data source
'make sure grid has a tablestyle
Dim ts As New DataGridTableStyle()
ts.MappingName = Me.dataSet11.Customers.TableName
Me.dataGrid2.TableStyles.Add(ts)
'now we can wire up wire up events for columns 1 and 4 ....
Dim tbc as DataGridTextBoxColumn = CType(ts.GridColumnStyles(0), DataGridTextBoxColumn)
AddHandler tbc.TextBox.KeyPress, AddressOf CellKeyPress
tbc = CType(ts.GridColumnStyles(3), DataGridTextBoxColumn)
AddHandler tbc.TextBox.KeyPress, AddressOf CellKeyPress
.....
'the handler
Private Sub CellKeyPress(sender As Object, e As KeyPressEventArgs)
'don't allow 1's
If e.KeyChar = "1"c Then
e.Handled = True
End If
End Sub 'CellKeyPress
Μπορείς να βρεις αυτό το παράδειγμα καθώς και απαντήσεις σε άλλες ερωτήσεις στο George Shepherd's Windows Forms FAQ
Παναγιώτης Καναβός, Freelancer
Twitter: http://www.twitter.com/pkanavos