【问题标题】:Adding multiple textboxes real time实时添加多个文本框
【发布时间】:2019-09-02 23:43:50
【问题描述】:

当我运行我的代码时,我能够成功地将值输入到其他文本框中,但它不会将所有值实时汇总到文本框 (txttotalcount) 中。它保持为空白文本框。

我尝试过使用 txttotalcount_TextChanged。我读过的所有其他来源都使用 Button_Click,但我希望算术实时发生(无需单击按钮)。

我将我的文本框定义为在按下按钮时添加 +1 增量:

Private Sub btnPMN_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPMN.Click
    'Add +1 to PMN Textbox (txtPMN)

    txtPMN.Text = (Val(txtPMN.Text) + 1).ToString()
End Sub

Private Sub BtnBand_Click(sender As Object, e As EventArgs) Handles btnBand.Click
    'Add +1 to Band Textbox (txtBand)

    txtBand.Text = (Val(txtBand.Text) + 1).ToString()
End Sub

然后我尝试获取这些文本框值并将其添加到最终文本框(txttotalcount)中:

Private Sub Txttotalcount_TextChanged(sender As Object, e As EventArgs) Handles txttotalcount.TextChanged
    'Adds all text boxes 
    txttotalcount.text = txtPMN.Text + txtBand.Text


End Sub

我想将所有文本框实时汇总到一个名为 txttotalcount.text 的最终文本框中(无需单击按钮)

当我运行我的代码时,txttotalcount 保持空白,尽管其他文本框中有值。

【问题讨论】:

  • 你的代码很糟糕!如果要添加数字然后添加数字,请不要连接字符串。控件的 Text 属性是 String 并添加两个 Strings 将它们连接起来,例如"1" + "1" 是“11”,而不是 2。
  • 我知道。这实际上是我第一次尝试使用 vb 进行编码。到目前为止,我所做的一切都是通过反复试验,查找其他代码并尝试学习和拼凑我所能做的。我可能应该买一本书或上课。
  • 周围有很多教程至少可以带您了解基础知识,例如homeandlearn.co.uk/NET/vbNet.html。从那里,您将更好地了解您不知道和需要专门研究的内容。

标签: vb.net math textbox real-time


【解决方案1】:

或者你可以使用这些作为替代:

Private Sub btnPMN_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPMN.Click
    txtIncrement(txtPMN, 1)
    Calculate()
End Sub

Private Sub BtnBand_Click(sender As Object, e As EventArgs) Handles BtnBand.Click
    txtIncrement(txtBand, 1)
    Calculate()
End Sub

Private Sub txtIncrement(ByRef myTextBox As TextBox, increment As Integer)
    If IsNumeric(myTextBox.Text) Then myTextBox.Text = (CLng(myTextBox.Text) + increment).ToString Else myTextBox.Text = 0
End Sub

Private Sub Calculate()
    txttotalcount.Text = "0"
    Dim myBand As Long = 0
    Dim myPMN As Long = 0
    If IsNumeric(txtBand.Text) Then myBand = CLng(txtBand.Text)
    If IsNumeric(txtPMN.Text) Then myPMN = CLng(txtPMN.Text)
    txttotalcount.Text = (myBand + myPMN).ToString("#,##0")
End Sub

【讨论】:

  • 太棒了!这个做到了!谢谢您的帮助!我从中学到了一些东西。非常感谢。
【解决方案2】:

执行此操作的正确方法是验证两个输入并仅在用户完成输入两个有效输入时才执行求和,例如

Private Sub TextBoxes_Validating(sender As Object, e As ComponentModel.CancelEventArgs) Handles TextBox2.Validating,
                                                                                                TextBox1.Validating
    Dim source = DirectCast(sender, TextBox)

    If source.TextLength > 0 AndAlso Not Integer.TryParse(source.Text, Nothing) Then
        source.SelectAll()
        source.HideSelection = False

        MessageBox.Show("Please enter a valid integer")

        source.HideSelection = True

        'Don't let the control lose focus with invalid contents.
        e.Cancel = True
    End If
End Sub

Private Sub TextBoxes_Validated(sender As Object, e As EventArgs) Handles TextBox2.Validated,
                                                                          TextBox1.Validated
    If TextBox1.TextLength > 0 AndAlso TextBox2.TextLength > 0 Then
        Label1.Text = (CInt(TextBox1.Text) + CInt(TextBox2.Text)).ToString()
    End If
End Sub

请注意,算术不会在用户键入时发生,而是在他们离开控件时发生。无需单击Button,但焦点必须离开TextBoxes。如果您真的愿意,您可以在输入更改时同时进行验证和算术运算,但我真的不明白向用户显示他们不感兴趣的结果有什么意义。

Private Sub TextBoxes_TextChanged(sender As Object, e As EventArgs) Handles TextBox2.TextChanged,
                                                                            TextBox1.TextChanged
    Dim input1 As Integer
    Dim input2 As Integer

    If TextBox1.TextLength > 0 AndAlso
       TextBox2.TextLength > 0 AndAlso
       Integer.TryParse(TextBox1.Text, input1) AndAlso
       Integer.TryParse(TextBox2.Text, input2) Then
        Label1.Text = (input1 + input2).ToString()
    Else
        Label1.ResetText()
    End If
End Sub

【讨论】:

    【解决方案3】:

    请不要使用 Val。那是vb6的剩余部分。在处理用户输入时,.TryParse 是一个不错的选择,因为您不能依赖用户输入您期望的内容。

    看看你用来求和的事件。什么改变了文本,所以这个事件会触发?如果您可以触发它,您可能正在创建循环引用,因为您正在更改 Texttotalcount.TextChanged 事件中 Txttotalcount 的文本。

    更新您的按钮点击总数。

    注意这行代码...

    txttotalcount.text = txtPMN.Text + txtBand.Text
    

    这不会得到你期望的结果。 .Text 属性是一个字符串。当编译器看到加号时,它会假设您想要连接字符串。假设您在一个文本框中有 5,在另一个文本框中有 7。 txttotalcount 将显示 57。“5”+“7”。如果你想做加法,你必须使用数字而不是字符串。

    Private Sub btnPMN_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPMN.Click
        Dim Band As Integer
        Dim PMN As Integer
        If Integer.TryParse(txtPMN.Text, Band) Then
            PMN += 1
            txtPMN.Text = PMN.ToString
        Else
            MessageBox.Show("Please enter a valid number in PMN")
            Exit Sub
        End If
        'Band will be zero if the parse fails
        Integer.TryParse(txtBand.Text, Band)
        txttotalcount.Text = (PMN + Band).ToString
    End Sub
    
    Private Sub BtnBand_Click(sender As Object, e As EventArgs) Handles btnBand.Click
        Dim Band As Integer
        Dim PMN As Integer
        If Integer.TryParse(txtBand.Text, Band) Then
            Band += 1
            txtBand.Text = Band.ToString
        Else
            MessageBox.Show("Please enter a valid number in Band")
            Exit Sub
        End If
        'PMN will be zero if the parse fails
        Integer.TryParse(txtPMN.Text, PMN)
        txttotalcount.Text = (PMN + Band).ToString
    End Sub
    

    【讨论】:

      【解决方案4】:

      这是另一种方法:

      Private Sub btnPMN_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPMN.Click
          'Add +1 to PMN Textbox (txtPMN)
          If IsNumeric(txtPMN.Text) Then
              txtPMN.Text = (CLng(txtPMN.Text) + 1).ToString
          Else
              txtPMN.Text = "1"
          End If
          Calculate()
      End Sub
      
      Private Sub BtnBand_Click(sender As Object, e As EventArgs) Handles BtnBand.Click
          'Add +1 to Band Textbox (txtBand)
          If IsNumeric(txtBand.Text) Then
              txtBand.Text = (CLng(txtBand.Text) + 1).ToString
          Else
              txtBand.Text = "1"
          End If
          Calculate()
      End Sub
      
      Private Sub Calculate()
          txttotalcount.Text = "0"
          Dim myBand As Long = 0
          Dim myPMN As Long = 0
          If IsNumeric(txtBand.Text) Then myBand = CLng(txtBand.Text)
          If IsNumeric(txtPMN.Text) Then myPMN = CLng(txtPMN.Text)
          txttotalcount.Text = (myBand + myPMN).ToString("#,##0")
      End Sub
      

      【讨论】:

      • 这个非常接近给我想要的东西。但是,当我单击按钮将 +1 增量添加到 Band 时,它保持在“1”。 PMN 继续触发并且 txttotalcount 正在捕获它。
      猜你喜欢
      • 1970-01-01
      • 2012-06-29
      • 2023-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多