0

我正在使用 Windows 窗体做一个简单的应用程序,我有一个问题......

我的表单有 15 个文本框,我想使用事件 KeyPress 或验证来验证每个人。我有这个工作的代码:

If Not IsNumeric(txtn1.Text) Then
e.Cancel = True
ErrorProvider1.SetError(txtn1, "")
Else
something(txtn1.text)
End If

但是我有 15 个文本框(可能更多),并且在每个文本框事件中都有点单调地复制/粘贴此代码。你能教我用一个函数来做到这一点吗?

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

我正在寻找正确的方法来做到这一点?

英语是我的第二语言,我也在学习编程。

4

2 回答 2

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
于 2012-10-01T03:56:53.460 回答
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

请注意我是如何将每个文本框的 KeyPress 事件处理程序分配给单个 NumericValidation_KeyPress 子例程的。我将发件人转换为文本框以找出触发了哪个文本框按键事件。

于 2012-10-01T04:04:16.237 回答