2013-08-01 123 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的东西。

看不到为什么你不能使用TextPress的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 
+0

您发布的方式表示感谢,但是由于您在Form1中添加的for循环,它会影响到所有TextBox。你可以告诉我怎么能这样做只有特定的文本框不是全部? – EmPlusPlus

+0

如果以特定的方式命名文本框(tb1,tb2,tb3等),可以使用If语句来查看该名称是否包含特定的字符串(如果tb.Name.Contains(“tb”)Then') ,以限制哪些文本框使用该处理程序。 – tinstaafl

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 
0

没有必要把它在一个模块中ü可以把事件下一个文本框,并指定该文本处理其他文本框的例如,如果u有两个文本框一个名为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
'only numbers entered
e.Handled = True
Beep() 'play beeping sound
End If

呼啦如果它的工作原理... N给男孩一些票PLZ

+0

它这样工作,但我必须使用模块。 – EmPlusPlus

相关问题