2013-08-01 46 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

相關問題