1

InputValue1,..OperationAdd 是 InputNumber 类的实例。如何将我的输入值分配给相应的文本框,因为该选项严格被激活?

Class MainWindow

    Dim InputValue1 As New InputNumber
    Dim InputValue2 As New InputNumber
    Dim ExpectedResultValue As New InputNumber
    Dim OperationAdd As New InputNumber

    Private Sub TBoxNumber1_TextChanged(sender As Object, e As TextChangedEventArgs) Handles TBoxNumber1.TextChanged
       TBoxNumber1.Text = InputValue1 'There is an error in this line, value of type InputNumber 'cannot be converted to a string
    End Sub

下面是 InputNumber 类:

Public Class InputNumber
    Inherits Input

    Private _number As Integer

    Public Property Number As Integer
        Get
            Return _number
        End Get
        Set(value As Integer)
            _number = value
        End Set
    End Property

    Protected Overrides Function Validate(s As String) As Boolean
        Dim isValid As Boolean = Integer.TryParse(s, _number)
        Return isValid
    End Function
End Class
4

2 回答 2

1

在我看来,您应该从对象中获取输入TextBoxInputNumber而不是相反。这:

TBoxNumber1.Text = InputValue1

应该是这样的:

InputValue1.Validate(TBoxNumber1.Text)

当实际需要显示该值时InputNumber,您将不得不使用InputValue1.Number.ToString(). 就个人而言,我会将其添加到您的InputNumber课程中:

Public Overrides Function ToString() As String
    Return Number.ToString()
End Function

然后你可以InputValue1.ToString()改用。

编辑:

有人指出,该Validate方法Protected不能这样调用。除非在基类中有一些用途,否则Input我不确定它的用途,因为就目前而言,您无论如何都需要在外部进行验证,例如

Dim number As Integer

If Integer.TryParse(TBoxNumber1.Text, number) Then
    InputValue1.Number = number
End If
于 2020-05-21T03:08:00.290 回答
0

我质疑InputNumber. 在目前的形式中没有多大意义。我们不知道验证何时发生,Number实际上是整数。

我会做这样的事情。

Public Class InputNumber

    Private _number As Integer
    Private _hasNumber As Boolean

    Public Sub New(s As String)
        SetNumber(s)
    End Sub

    Public Sub New()
    End Sub

    Public ReadOnly Property Number As Integer
        Get
            Return _number
        End Get
    End Property

    Public ReadOnly Property HasNumber As Boolean
        Get
            Return _hasNumber 
        End Get
    End Property

    Public Sub SetNumber(s As String)
        _hasNumber  = Integer.TryParse(s, _number)
    End Sub

    ' For consistency...
    Public Sub SetNumber(i As Integer)
        _hasNumber = true
        _number = i
    End Sub

    Public Overrides Function ToString() As String
       If HasNumber Then Return Number.ToString()
       Return String.Empty
    End Function
End Class

然后你的用法将是(我同意@jmcilhinney,当你有TextChange事件时,你想从文本框中获取一个值并设置一个变量)

Dim inp As New InputNumber("ddd")
txtBox1.Text = If(inp.HasNumber, inp.Number.ToString(), "NO VALUE") '' example to use HasNumber

inp.SetNumber("sss")
txtBox2.Text = inp.ToString() '' Example to use straight value

inp.SetNumber(10)
Dim current As Integer = If(inp.HasNumber, inp.Number, -1) '' using as numeric value

现在,这门课更有意义了

于 2020-05-21T14:10:08.677 回答