如何在sub中保留变量值?

时间:2013-10-02 21:24:15

标签: vb.net visual-studio-2005

我有一些IDE制作的代码,它们将文本框作为Subs。我需要将变量'printString'的值从一个Sub保留到另一个Sub。我的搜索似乎表明第一个sub需要变成一个函数,但是当我这样做时它会中断。

    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

是的,我是新手。

我如何保留该变量值?

3 个答案:

答案 0 :(得分:1)

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

Private Sub txtSerialNumber_Leave(...

    Dim printString As String = My.Resources.Fuel_Cell_Label

printString是一个局部变量,因为您在过程中声明了它(Dim)。这每次都会创建一个新的。为了给它模块级范围,只需将它声明在任何subs:

之外
Dim printString As String =""

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

End Sub

确保在符合逻辑时将其重置为“”,否则它将继续累积。在那个例子中,你不知道他们将留下哪一个,或者他们是否会重新输入文本,所以你需要重新考虑你是如何做到这一点的。某种“OK”或“完成”按钮用这两个事件中的代码调用sub是一种方式。

有关Scope in Visual Basic

的更多信息

答案 1 :(得分:1)

您可以将该值设置为如下属性:

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

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

答案 2 :(得分:0)

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

通过单击Visual Studio顶部菜单上的Project,然后单击Add Module。

来执行此操作

然后将Public变量添加到模块:

Module Module1
     Public printString As String =""
End Module