Я не могу KeyPress событие здесь для него. Поэтому мне нужно что-то, что можно использовать вместо KeyChar.
Не могу понять, почему вы не можете использовать обработчик событий KeyPress для TextBox, потому что это сделает то, что вы хотите. Чтобы добавить один и тот же обработчик к различным элементам управления, вы можете использовать цикл For Each в обработчике загрузки формы. При необходимости обработчик событий может находиться в общедоступном модуле, если вы хотите, чтобы с ним обрабатывались события на элементах управления в разных формах.
Если вы изменили свою функцию, чтобы принять Char и вернуть логическое значение, вы можете выполнить то, что вы хотите, просто используя метод Char.IsDigit. И преобразуйте аргумент e в обработчик события в Char. Что-то вроде этого:
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
For Each tb As TextBox In Me.Controls.OfType(Of TextBox)()
AddHandler tb.KeyPress, AddressOf TextBox_KeyPress
Next
End Sub
Private Sub TextBox_KeyPress(sender As Object, e As System.Windows.Forms.KeyPressEventArgs)
e.Handled = intError(e.KeyChar)
End Sub
Public Function intError(Character As Char) As Boolean
intError = False
If Not Char.IsDigit(Character) Then
intError = True
MessageBox.Show("You can only enter numbers.", " You did wrong, Honey!", MessageBoxButtons.OK, MessageBoxIcon.Hand)
End If
End Function
KeyChar не работает, потому что он не существуют на объекте правильно? –
Как вы называете эту функцию? –
Как эта функция должна знать, какой ключ был нажат? Вызывающий должен передать функции 'e' или лучше' e.KeyChar'. –