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的东西。
答案 0 :(得分:0)
在新子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
答案 1 :(得分:0)
我不能在这里使用KeyPress事件。所以我需要一些可以用来代替KeyChar的东西。
无法理解为什么你不能为TextBox使用KeyPress事件处理程序,因为它会做你想要的。要将相同的处理程序添加到不同的控件,可以在Form加载处理程序中使用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
答案 2 :(得分:0)
无需将其放在模块中你可以将事件放在一个文本框下并指定该文本框处理其他文本框,例如,如果你有两个文本框,一个名为txtStudentNumber,txtPhoneNumber,你可以写
Private Sub txtStudentNumber_KeyPress(sender As Object, e As System.Windows.Forms.KeyPressEventArgs) Handles txtStudentNumber.KeyPress, txtPhoneNumber.KeyPress
注意在Handles之后你可以指定你可以控制哪些其他文本框的事件。然后在子u内可以使用代码
If (e.KeyChar < "0" OrElse e.KeyChar > "9") AndAlso e.KeyChar <> ControlChars.Back Then
{
{1}}
'only numbers entered
{
{1}} {
{1}}
霍拉如果有效......给一个男孩一些投票PLZ