2015-06-04 53 views
0

這是我的問題。如果用戶在文本框中鍵入數字是正確的,但是如果他鍵入一個字符,我不會在屬性中看到messagebox()。 爲什麼?屬性中的錯誤消息

<TextBox HorizontalAlignment="Left" 
     TabIndex="12" 
     Text="{Binding Time_HH, UpdateSourceTrigger=PropertyChanged,StringFormat='{}{##}'}" 
     FlowDirection="RightToLeft" 
     MaxLength ="2" 
     Height="30" 
     Width="30" /> 

這是物業

Private _Time_HH As Integer 

Public Property Time_HH() As Integer 
    Get 
     Return _Time_HH 
    End Get 
    Set(value As Integer) 
     For i = 0 To Len(value.ToString) 
      If IsNumeric(value.ToString(i)) = False Then 
       MessageBox.Show("Error") 
       value = 0 
      End If 
     Next 

     _Time_HH = value 
     OnPropertyChanged("Time_HH") 
    End Set 
End Property 
+0

_value爲Integer_然後_value.ToString()_沒有辦法,一個整數可能包含一個不是數字的字符(符號的一部分)。 – Steve

回答

1

Time_HH屬性是一個整數,沒有辦法它會包含一個非數字字符。

至多,會發生什麼事是你的綁定將失敗的原因類型不匹配(在你的文本框顯示紅色的輪廓線?)

如果你,如果你的用戶輸入非數字字符想檢查,必須使用一個允許如此的類型:一個字符串。

試試這個:

Private _Time_HH As Integer 
Public Property Time_HH() As String 
    Get 
     Return _Time_HH.ToString() 
    End Get 
    Set(value As String) 
     For i = 0 To Len(value) 
      If IsNumeric(value.ToString(i)) = False Then 
       MessageBox.Show("Error") 
       value = 0 
      End If 
     Next 

     _Time_HH = Integer.Parse(value) 
     OnPropertyChanged("Time_HH") 
    End Set 
End Property 

如果您需要使用的數值,使用整型字段。您可以創建整數類型的第二屬性,如果你想使用它的另一種結合或類似的東西,僅僅暴露了場,(記得要提高OnPropertyChanged該屬性也一樣,那麼,在Time_HH二傳手)

小心 - 如果用戶輸入類似「00,01-2,0」的內容,上面的代碼將引發異常。 IsNumeric返回該字符串中所有字符的True,但這並不意味着它是正確的數字。

在我看來,這將是更好地做到這一點:

Private _Time_HH As Integer 
Public Property Time_HH() As String 
    Get 
     Return _Time_HH.ToString() 
    End Get 
    Set(value As String) 
     Dim int As Integer 

     If Integer.TryParse(value, int) = False Then 
      MessageBox.Show("Error") 
     End If 

     _Time_HH = int 
     OnPropertyChanged("Time_HH") 
    End Set 
End Property 

很抱歉,如果我做了一些錯誤,我通常是在C#代碼和我的VB是相當生疏:P

+0

很多謝謝! :-) – Alan392

+0

不客氣! – almulo