Vb.net 如何在SUB之间保持变量值?

Vb.net 如何在SUB之间保持变量值?,vb.net,visual-studio-2005,Vb.net,Visual Studio 2005,我有一些IDE编写的代码,它将文本框作为sub。我需要将变量“printString”的值从一个子系统保留到另一个子系统。我的搜索似乎表明需要将第一个子函数转换为函数,但当我这样做时,它就会中断 Private Sub txtSerialNumber_Leave(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtSerialNumber1.Leave 'condition the scan

我有一些IDE编写的代码,它将文本框作为sub。我需要将变量“printString”的值从一个子系统保留到另一个子系统。我的搜索似乎表明需要将第一个子函数转换为函数,但当我这样做时,它就会中断

    Private Sub txtSerialNumber_Leave(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtSerialNumber1.Leave
    'condition the scanned serial number
    Dim serialNumber As String = txtSerialNumber1.Text
    serialNumber = serialNumber.ToUpper()
    serialNumber = serialNumber.Trim()
    txtSerialNumber2.Focus()
    'replace tokens
    'read the label file into a string variable
    Dim printString As String = My.Resources.Fuel_Cell_Label
    'read the top position into a variable
    Dim topPosition As String = My.Settings.prntLabelTop
    'read the left position into a variable
    Dim leftPosition As String = My.Settings.prntLabelLeft
    'replace the tokens with values
    printString = printString.Replace("[[Top]]", topPosition)
    printString = printString.Replace("[[Left]]", leftPosition)
    printString = printString.Replace("[[serial_1]]", serialNumber)
End Sub

Private Sub txtSerialNumber2_Leave(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtSerialNumber2.Leave
    'condition the scanned serial number
    Dim serialNumber2 As String = txtSerialNumber2.Text
    serialNumber2 = serialNumber2.ToUpper()
    serialNumber2 = serialNumber2.Trim()
    'reset the front panel controls
    txtSerialNumber1.Text = ""
    txtSerialNumber2.Text = ""
    txtSerialNumber1.Focus()
    'replace the last token
    printString = printString.Replace("[[serial]]", serialNumber2)
    'print the label string
    Dim Printer As New Microsoft.VisualBasic.PowerPacks.Printing.Compatibility.VB6.Printer
    Printer.Print(printString)
    'MessageBox.Show(printString)
End Sub
是的,我是新来的


如何保持该变量值?

问题是
范围的问题之一。简而言之,在这种情况下:

Private Sub txtSerialNumber_Leave(...

    Dim printString As String = My.Resources.Fuel_Cell_Label
printString
是一个局部变量,因为您在过程中声明了它(
Dim
)。每次都会创建一个新的。要赋予它模块级的作用域,只需在任何子类之外声明它:

Dim printString As String =""

Private Sub txtSerialNumber_Leave....
    ' it will retain the

End Sub
请确保在您将其重置为“”时,它将继续累积。在这个例子中,你不知道他们会离开哪一个,或者他们是否会重新输入文本,因此你需要重新思考你是如何做到的。某种类型的“OK”或“Done”按钮是一种方式,它使用来自这两个事件的代码调用sub


有关

的详细信息您可以将该值设置为如下属性:

Public Property Number() As Integer
Get
    Return _count
End Get
Set(ByVal value As Integer)
    _count = value
End Set
End Property

然后,您可以在程序中的任何位置调用该公共属性,并知道将返回什么。如果没有get和set,则只需返回属性中的值。

如果要使用这些类型的变量中的一些,为了使事情保持有序,可以创建一个模块并将公共变量放入模块中

为此,请单击Visual Studio顶部菜单上的Project,然后单击Add Module

然后将公共变量添加到模块中:

Module Module1
     Public printString As String =""
End Module

嗯,这正是我所处的节目阶段的正确轨道。我还在“txtSerialNumber_leve”子菜单中留下了以下内容——“Dim printString As String”,这把它搞砸了。一旦我删除了“DIM”和“As String”部分,它就工作了。谢谢大家帮助我学习!