如何在Visual Basic中的类之间共享变量?

时间:2018-09-30 21:18:35

标签: vb.net

我有一个名为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

结束班级

1 个答案:

答案 0 :(得分:0)

在这种情况下(试图辨别为什么一个方法没有达到我的期望),我发现如果我准确写下代码的每一行实际上是在做什么,而不是在写我期望的东西,可以找到问题的原因。您有两个事件处理程序方法:

添加事件处理程序执行以下逻辑:

  1. 创建新文本框
  2. 命名
  3. 提供尺寸/位置
  4. 将其添加到表单的控件集合中
  5. 将其text属性添加到sum值

然后,提交事件处理程序执行此操作

  1. 创建一个新标签
  2. 命名
  3. 提供尺寸/位置
  4. 将其添加到表单的控件集合中
  5. 将其文本设置为sum的值

从来没有做过的事情是将它们添加到表单后,“从文本框的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上。