2013-05-22 11 views
0

如何接受輸入框上的連字符和數值?數值和連字符「 - 」inputbox vb.net

Private Sub TextBox_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles inputBox_1.KeyDown 
     Select Case e.KeyCode 
      Case Keys.D0 To Keys.D9, Keys.NumPad0 To Keys.NumPad9, _ 
       Keys.Back, Keys.Delete, Keys.Left, Keys.Right 
       If e.Shift = True Then 
        e.SuppressKeyPress = True 
        Exit Sub 
       End If 
       e.SuppressKeyPress = False 
      Case Else 
       e.SuppressKeyPress = True 
     End Select 
    End Sub 

但是,當我進入失敗 - 字符在該行

Keys.D0 To Keys.D9, Keys.NumPad0 To Keys.NumPad9, _ 
        Keys.Back, Keys.Delete, Keys.Left, Keys.Right 

如何讓連字符被寫入 「」?

+0

難道你真的想阻止他們將這些值輸入框中嗎?或者你會滿足於讓他們打字,然後再進行驗證,從而超過範圍值?我想我在這裏真正要求的是圍繞您的問題提供更多的背景知識,以便我們能夠確定哪種解決方案最適合您的實際需求。 – Adrian

+0

我在想這個問題更好,我想也許我應該驗證所有的用戶填寫表單之後,無論如何,Dou你知道如何使用我在所有文本框中的代碼嗎? – cMinor

+0

您可以在'Handles'後給出[事件列表](http://msdn.microsoft.com/en-us/library/6k46st1y(v = vs.80).aspx)。 – Adrian

回答

1

這是更好地創建自定義的控制和任何你想要的數字文本框 也爲數字限制的數字我覺得這是一個最大長度屬性爲文本框 可以在下面的鏈接回答您的問題

link使用

+1

當你只能處理基本控件的驗證時,真的不需要去創建自定義控件的所有麻煩。另外,我認爲'MaxLength'不適合限制數字的大小,因爲需要支持負數 – Adrian

1

這裏有一個解決方案。我希望這會更漫長,你可以通過將textbox文本屬性拆分爲單個字符並全部檢查它們來加速它(但是如果你希望你的代碼將字母放到文本框中,那)。

無論如何,我測試了這個,它工作正常,它出現在秒錶上0毫秒,所以它不應該提供任何明顯的減速給用戶。請注意,有一個全局布爾變量。

Dim boo As Boolean = True 

Private Sub TextBox1_TextChanged(sender As System.Object, e As System.EventArgs) Handles TextBox1.TextChanged 
    Dim temp As String 
    Dim tempchr As Integer 
    If boo = True Then 
     boo = False 

     temp = Mid(TextBox1.Text, TextBox1.SelectionStart, 1) 
     tempchr = Asc(temp) 

     If tempchr < 48 Or tempchr > 58 Then 
      If tempchr = 45 Then 

      Else 
       If TextBox1.SelectionStart - 1 > 0 Then 
        If TextBox1.SelectionStart = TextBox1.TextLength Then 
         TextBox1.Text = Mid(TextBox1.Text, 1, TextBox1.SelectionStart - 1) 
        Else 
         TextBox1.Text = Mid(TextBox1.Text, 1, TextBox1.SelectionStart - 1) & Mid(TextBox1.Text, TextBox1.SelectionStart + 1) 
        End If 

       Else 
        If TextBox1.SelectionStart = TextBox1.TextLength Then 
         TextBox1.Text = "" 
        Else 
         TextBox1.Text = Mid(TextBox1.Text, TextBox1.SelectionStart + 1) 
        End If 

       End If 

      End If 
     Else 
      boo = True 
     End If 

    Else 
     boo = True 
    End If 
    TextBox1.SelectionStart = TextBox1.TextLength 
End Sub