这是我的问题。如果用户在文本框中键入数字是正确的,但如果他键入char,我在属性中看不到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 :(得分:1)
您的Time_HH
属性是一个整数,但它不会包含非数字字符。
最多会发生的是,由于类型不匹配,您的Binding会失败(您的TextBox是否显示红色轮廓?)
如果您想检查您的用户是否输入了非数字字符,您必须使用允许这样的类型:字符串。
试试这个:
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
如果需要使用数值,请使用“整数”字段。您可以创建一个Integer类型的第二个属性,它只是公开该字段,如果您想将它用于另一个Binding或类似的东西(记得也为该属性引发OnPropertyChanged
,那么,在{{1 } setter)
注意 - 如果用户键入类似&#34; 00,01-2,0&#34;的内容,上面的代码将引发异常。 Time_HH
为该字符串中的所有字符返回IsNumeric
,但这并不意味着它是正确的数字。
在我看来,这样做会更好:
True
对不起,如果我犯了一些错误,我通常用C#编写代码,而我的VB很生锈:P