实时添加多个文本框
Adding multiple textboxes real time
当我 运行 我的代码时,我能够成功地将值输入其他文本框,但它不会实时将所有值汇总到文本框 (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 保持空白,尽管其他文本框中有值。
执行此操作的正确方法是验证两个输入,并且仅在用户完成输入两个有效输入时才执行求和,例如
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
请不要使用 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
这是另一种方法:
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
或者您可以使用这些作为替代:
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
当我 运行 我的代码时,我能够成功地将值输入其他文本框,但它不会实时将所有值汇总到文本框 (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 保持空白,尽管其他文本框中有值。
执行此操作的正确方法是验证两个输入,并且仅在用户完成输入两个有效输入时才执行求和,例如
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
请不要使用 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
这是另一种方法:
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
或者您可以使用这些作为替代:
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