2013-08-01 2 views
-1
Imports Microsoft.VisualBasic 

Module Functions 
    Public Function intError() 
     Dim e As System.EventArgs 
     If AscW(e.KeyChar) < 48 Or AscW(e.KeyChar) > 57 Then 
      e.Handled = True 
      MessageBox.Show("You can only enter numbers.", " You did wrong, Honey!", MessageBoxButtons.OK, MessageBoxIcon.Hand) 
     End If 
    End Function 
End Module 

Использование e.KeyChar не работает, так как для этого требуется KeyPressEventArgs, и поскольку он работает в этом модуле, я не могу здесь использовать событие KeyPress. Поэтому мне нужно что-то, что можно использовать вместо KeyChar.Что я могу использовать вместо KeyChar?

+0

KeyChar не работает, потому что он не существуют на объекте правильно? –

+0

Как вы называете эту функцию? –

+2

Как эта функция должна знать, какой ключ был нажат? Вызывающий должен передать функции 'e' или лучше' e.KeyChar'. –

ответ

0

Я не могу 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 
+0

То, как вы опубликовали работу, спасибо, но это влияет на все TextBox из-за цикла for, который вы добавили в Form1. Не могли бы вы рассказать мне, как я могу сделать это только для определенных текстовых полей не для всех? – EmPlusPlus

+0

Если вы назовете текстовые поля определенным образом (tb1, tb2, tb3 и т. Д.), Вы можете использовать оператор If, чтобы узнать, содержит ли имя определенную строку ('if tb.Name.Contains (" tb ") Then') , чтобы ограничить, какие текстовые поля используют этот обработчик. – tinstaafl

0

Установить это в Нью-Sub Me.KeyPreview = True

С, что вы можете справиться с KeyEventArgs

Private Sub KeyPressed(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyPress 

    Select Case e.KeyCode 
     Case Keys.D1 
      ' Do Stuff 
     ... 
     Else Case 
      'Other stuff 
    End Select 

End Sub 
0

Нет необходимости поставить его в модуле и может поставить событие под одним текстовым полем и указать, что это текстовое поле обрабатывает, например, другие TextBox, если у вас два текстовых полей одного имени txtStudentNumber и txtPhoneNumber вы можете написать
Private Sub txtStudentNumber_KeyPress(sender As Object, e As System.Windows.Forms.KeyPressEventArgs) Handles txtStudentNumber.KeyPress, txtPhoneNumber.KeyPress
Обратите внимание, как после Ручек вы можете указать, какие события другого текстового поля вы можете контролировать. Тогда в суб и может использовать код
If (e.KeyChar < "0" OrElse e.KeyChar > "9") AndAlso e.KeyChar <> ControlChars.Back Then
'only numbers entered
e.Handled = True
Beep() 'play beeping sound
End If

Holla, если он работает ... п дать мальчику несколько голосов плз

+0

Это сработало, но я должен использовать модуль. – EmPlusPlus

Смежные вопросы