2

我有一些由 IDE 编写的代码,它们使文本框成为 Subs。我需要将变量“printString”的值从一个 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

是的,我对此并不陌生。

我将如何保留该变量值?

4

3 回答 3

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

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

更多关于Visual Basic 中的作用域

于 2013-10-02T21:30:21.217 回答
1

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

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

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

于 2013-10-03T00:49:44.920 回答
0

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

为此,请单击 Visual Studio 顶部菜单上的项目,然后单击添加模块。

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

Module Module1
     Public printString As String =""
End Module
于 2013-10-03T01:04:26.433 回答