我如何使用文本框textchanged事件更改用户输入类别?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我如何使用文本框textchanged事件更改用户输入类别?相关的知识,希望对你有一定的参考价值。

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
答案

在我看来,您应该将TextBox的输入输入到InputNumber对象,而不是相反。这个:

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
另一答案

我正在质疑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

现在,这个课程更有意义

以上是关于我如何使用文本框textchanged事件更改用户输入类别?的主要内容,如果未能解决你的问题,请参考以下文章

文本框文本在WPF中更改了事件

我在 youtube 上看到的代码不起作用。我需要通过在文本框上使用 textchanged 事件来执行 Rowfilter

带有TextChanged事件的文本框不会在第二次输入中显示日期

更新文本框后面的数据表?

Asp.Net,UpdatePanel 中的文本框文本更改问题

c#textbox的textchanged事件的作用