2014-05-18 28 views
0

我正在为可能的文本框做一个验证DLL。我的DLL的代码这样Validation Class(dll)

Public Class validatedll 
    Function onlynumbers(ByVal r As String) 
     Dim list As String, character As String 
     Dim i As Integer 
     list = "1234567890" 
     i = 1 
     If r <> "" Then 
cntinue: 
      If i > 10 Then 
       MsgBox("invalid character. Last character will be delete !") 
       r = Mid(r, 1, Len(r) - 1) 
       Return r 
       Exit Function 
      End If 
      character = Mid(list, i, 1) 
      If Microsoft.VisualBasic.Right(r, 1) = character Then Exit Function 
      i = i + 1 
      GoTo cntinue 
     Else 
      Exit Function 
     End If 
    End Function 
End Class 

和IM期运用此DLL在我的项目是这样

Imports ModifiedTextbox 
Public Class Form1 
    Public validate As New validatedll 
    Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged 
     ' TextBox1.Text = validate.onlynumbers(TextBox1.Text) 
    End Sub 

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
     TextBox1.Text = validate.onlynumbers(TextBox1.Text) 
    End Sub 
End Class 

我的问题是,如果我在TextBox1_TextChanged事件中使用这个DLL,Textbox1的文本给我看什么,因为DLL没有返回数字。 İf我用这个代码与按钮,代码工作,并删除最后一个字母,如果一封信。

如何在textchanged事件中使用此dll?请帮助我。 我最好的问候

+0

setting .Text在textchanged事件中将触发另一个TextChanged事件。为什么你需要参与用户的每次击键? TextBox具有完美的验证事件,或者使用MaskedEdit控件来设置一个只接受任何你需要的数字的掩码。 – Plutonix

+0

Ty给你评论。我需要允许我想要的字符。例如“只有数字和/或”只有大写字母和小写字母“ – Aresos

回答

0

你没有得到回报的主要原因是每当你的循环找到正确的字符退出。

有几件事情:

函数应该始终有一个As子句指定返回类型。今天你可能还记得今年的回报吗?

千万不要使用GoTo。 VB.net有几个功能循环,可以做任何你喜欢的事情。

假设你想扩展,以支持你可能要考虑的另一种方法等验证:

Public Class validatedll 
    Sub onlynumbers(tb As TextBox) 
     While Not tb.Text = "" AndAlso Not Double.TryParse(tb.Text, vbNull) 
      tb.Text = tb.Text.Remove(tb.Text.Length - 1) 
      tb.SelectionStart = tb.Text.Length 
     End While 
    End Sub 
End Class 

我把它获取传递到文本框的参考子。这可以让您的验证机制更加划分。如果您决定将此类扩展为自定义控件,这也会使它更容易。

这测试字符串是否是一个数字,并且保持减去字符直到它为空或是一个数字。这将适用于实时验证或退出验证。

+0

Ty供您评论。我需要允许我想要的字符。例如“只有数字和/和”。或“只有大写字母和小写字母”bla bla – Aresos

+0

(tb As TextBox)does not working in class project。但我试图在表单项目工作,因为窗体有TextBox控件。 – Aresos

+0

您可以将表单库导入到类中。使用Double.TryParse将允许任何数字字符和小数字符。 – tinstaafl

0

我解决了我的问题。也许有人需要这个。你可以添加哪些字符想要与orelse允许;

Function onlynumbers(ByVal chars As String, ByVal exclmtn As Boolean, Optional title As String = "Title what you want") 
    If chars = "" Then Exit Function 
    If _ 
     Microsoft.VisualBasic.Right(chars, 1) = "1" OrElse _ 
     Microsoft.VisualBasic.Right(chars, 1) = "2" OrElse _ 
     Microsoft.VisualBasic.Right(chars, 1) = "3" OrElse _ 
     Microsoft.VisualBasic.Right(chars, 1) = "4" OrElse _ 
     Microsoft.VisualBasic.Right(chars, 1) = "5" OrElse _ 
     Microsoft.VisualBasic.Right(chars, 1) = "6" OrElse _ 
     Microsoft.VisualBasic.Right(chars, 1) = "7" OrElse _ 
     Microsoft.VisualBasic.Right(chars, 1) = "8" OrElse _ 
     Microsoft.VisualBasic.Right(chars, 1) = "9" OrElse _ 
     Microsoft.VisualBasic.Right(chars, 1) = "0" Then 
     Return chars 
     Exit Function 
    Else 
     If exclmtn = False Then 
      chars = Mid(chars, 1, Len(chars) - 1) 
      Return chars 
      Exit Function 
     End If 
     If exclmtn = True Then 
      MsgBox("invalid. last char ll delete !", , title) 
      chars = Mid(chars, 1, Len(chars) - 1) 
      Return chars 
      Exit Function 
     End If 
    End If 
End Function