-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 的东西。

4

3 回答 3

0

在 New 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
于 2013-08-01T14:28:35.397 回答
0

我不能在这里进行 KeyPress 事件。所以我需要一些可以用来代替 KeyChar 的东西。

看不出为什么不能对 TextBox 使用 KeyPress 事件处理程序,因为它会做你想做的事。要将相同的处理程序添加到不同的控件,您可以在表单加载处理程序中使用 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
于 2013-08-01T14:49:06.320 回答
0

无需将其放入模块中,您可以将事件放在一个文本框下并指定该文本框处理其他文本框,例如,如果您有两个文本框,一个名为 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

霍拉,如果可行的话……请给一个男孩一些选票

于 2013-08-01T15:49:11.847 回答