【问题标题】:How can I share a variable across classes in Visual Basic?如何在 Visual Basic 中跨类共享变量?
【发布时间】:2018-09-30 21:18:35
【问题描述】:

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

结束类

【问题讨论】:

  • 你没有展示最突出的部分——那些其他的东西是如何试图获得价值的,但我怀疑这是一个不同的例子
  • 在项目中设置Option Strict On或者写在代码文件的顶部。编译器将为您节省大量调试时间。

标签: vb.net


【解决方案1】:

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

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

  1. 新建一个文本框
  2. 给它命名
  3. 给它一个大小/位置
  4. 将其添加到表单的控件集合中
  5. 将其文本属性添加到 sum 中的值

然后提交事件处理程序会这样做

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

在将它们添加到表单后,从未做过“从文本框的文本属性读取”,并且允许用户使用它们。基本上,您永远不会从用户那里收集价值,只是在将属性添加到表单后立即检查。此外,您没有使用值预先填充 text 属性,因此在那个时间点,它是一个空字符串。

提交事件处理程序需要以某种方式从输入的文本框中收集值。由于文本框是在每次添加事件处理程序提交时动态添加到表单中的,因此需要运行提交事件顶部的类似内容:

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。

【讨论】:

  • 您也可以使用For Each ctrl In Me.Controls.OfType(Of TextBox)保存TypeOf检查和演员表:For Each ctrl In Me.Controls.OfType(Of TextBox)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-03
  • 2022-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多