属性 中的错误消息
Error message in a property
这是我的问题。如果用户在文本框中键入一个数字是可以的,但如果他键入一个字符,我在 属性 中看不到消息框 ()。
为什么?
<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
您的 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 ,它只是公开字段(记住也为那个 属性 提高 OnPropertyChanged
, 然后, 在 Time_HH
setter)
注意 - 如果用户键入类似“00,01-2,0”的内容,上面的代码将引发异常。 IsNumeric
returns 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
这是我的问题。如果用户在文本框中键入一个数字是可以的,但如果他键入一个字符,我在 属性 中看不到消息框 ()。 为什么?
<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
您的 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 ,它只是公开字段(记住也为那个 属性 提高 OnPropertyChanged
, 然后, 在 Time_HH
setter)
注意 - 如果用户键入类似“00,01-2,0”的内容,上面的代码将引发异常。 IsNumeric
returns 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