属性 中的错误消息

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