2014-05-18 27 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