我可以用什么代替KeyChar?

时间:2013-08-01 14:19:08

标签: vb.net

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

3 个答案:

答案 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