我有一个名为sum
的变量,它是多个文本框中的值之和。
我有一个用于创建文本框的按钮,其中每个文本框的值都添加到sum
中,只要文本框内有一个值即可。
然后我有另一个按钮来创建标签,并且我希望label.Text
的值等于sum
。
即使将变量设为公共变量,并将两个类都设为公共变量,label.Text
的值始终为0。
这是我的代码:
Public Class Form
Dim counter As Integer = 1
Dim locationy As Integer = 169
Public sum As Integer = 0
Public Sub btn_New_Click(sender As Object, e As EventArgs) Handles btn_New.Click
Dim tBox_NewPrice As New TextBox
tBox_NewPrice.Name = "tBox_NewPrice" & counter
tBox_NewPrice.Size = New Size(74, 20)
tBox_NewPrice.Location = New Point(207, locationy)
Me.Controls.Add(tBox_NewPrice)
counter = counter + 1
locationy = locationy + 31
If tBox_NewPrice.Text <> "" Then
sum = sum + tBox_NewPrice.Text
End If
End Sub
Public Sub btn_submit_Click(sender As Object, e As EventArgs) Handles btn_submit.Click
Dim Label As New Label
Label.Name = "label1"
Label.Size = New Size(50, 50)
Label.Location = New Point(20, 20)
Me.Controls.Add(Label)
Me.Refresh()
Label.Text = sum
End Sub
结束班级
答案 0 :(得分:0)
在这种情况下(试图辨别为什么一个方法没有达到我的期望),我发现如果我准确写下代码的每一行实际上是在做什么,而不是在写我期望的东西,可以找到问题的原因。您有两个事件处理程序方法:
添加事件处理程序执行以下逻辑:
然后,提交事件处理程序执行此操作
从来没有做过的事情是将它们添加到表单后,“从文本框的text属性中读取”,并且允许用户使用它们。基本上,您永远不会从用户那里收集值,而只是在将它们添加到表单后立即检查该属性。另外,您不会在文本属性中预先填充一个值,因此在那个时间点它是一个空字符串。
submit事件处理程序需要以某种方式从输入的文本框中收集值。由于文本框是在每次添加事件处理程序提交时动态添加到表单的,因此需要运行Submit Event顶部的类似内容:
sum = 0
For each ctrl As Control in me.Controls
If TypeOf ctrl Is Textbox Then
dim txt As Textbox = DirectCast(ctrl, Textbox)
dim i as Integer =0
If Integer.TryParse(txt.Text, i) Then
Sum = Sum + i
End If
End If
Next
发生的事情是,我们正在遍历控件集合,并正在寻找文本框。当我们找到一个时,如果它的TEXT属性包含一个整数值,我们就将字符串转换为一个整数,并将其加到sum上。