我正在使用Windows Forms进行简单的应用程序,我有一个问题......
我的表单有15个文本框,我想使用事件KeyPress或验证来验证每个人。我有这个代码正在运行:
If Not IsNumeric(txtn1.Text) Then
e.Cancel = True
ErrorProvider1.SetError(txtn1, "")
Else
something(txtn1.text)
End If
但是我有15个文本框(可能更多),并且在每个文本框事件中都是一个有点单调的副本/ pase这个代码。你可以教我使用函数吗?
Public Function isnum(ByVal txt As TextBox, ByVal errpro as ErrorProvider) As Double
If Not IsNumeric(txt.Text) Then
e.Cancel = True <-------------------------------This dont work
errpro.SetError(txt, "")
End If
End Function
Private Sub txtn1_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles txtKLDC.Validating
if isnum(txtn1, ErrorProvider1) then
something(txtn1.text)
end if
我正在寻找正确的方法吗?
英语是我的第二语言,我也在学习编程。
答案 0 :(得分:1)
使用常见的KeyPress事件,然后使用发件人对象,该对象是发起事件的TextBox并将其强制转换为TextBox。
Private Sub txt_KeyPress(sender As System.Object, e As System.Windows.Forms.KeyPressEventArgs) Handles txtn1.KeyPress, txtn2.KeyPress, txtn3.KeyPress, txtn4.KeyPress, txtn5.KeyPress
Dim tb As TextBox = CType(sender, TextBox)
If Not IsNumeric(tb.Text) Then
e.Handled = True
ErrorProvider1.SetError(tb, "")
Else
something(tb.Text)
End If
End Sub
答案 1 :(得分:0)
使用此代码:
Private Sub NumericValidation_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) _
Handles TextBox1.KeyPress, TextBox2.KeyPress, upto 16500 or so is possible...
Dim txt As TextBox = CType(sender, TextBox)
If Not IsNumeric(txt.Text) Then
e.Cancel = True
ErrorProvider1.SetError(txt, "")
Else
something(txt.text)
End If
End Sub
请注意我如何将Textbox的KeyPress事件处理程序中的每一个分配给单个NumericValidation_KeyPress子例程。我将发件人转换为文本框,以找出触发了哪个文本框按键事件。