【问题标题】:Need to reference a variable using the value stored in a string vb6需要使用存储在字符串 vb6 中的值来引用变量
【发布时间】:2010-10-02 20:00:37
【问题描述】:

我正在使用 For 循环遍历一些代码。迭代变量是“i”。在 For 循环之前,我已经确定了以下变量的尺寸。 L1、L2、L3、L4 作为字符串。我想通过某种方式引用“L”和char(i)来在For循环中引用这些字符串。因此,就像值“Foo”“L”和 Char(i) 的比较一样,结果应该是在 i=1 时针对存储在变量 L1 中的字符串测试“Foo”。或者当 i=2 时针对 L2 等等。

我以前的编程经验是 Visual FoxPro,我所要做的就是在字符串前面加上一个 & 前缀,然后它引用了名称存储在字符串中的变量。

因此,如果 L1 存储“Bar”,并且我想比较我可以写 &L1 == “Bar”。我需要能够用 VB6 做到这一点。有人可以帮忙吗?

【问题讨论】:

    标签: vb6 pass-by-reference


    【解决方案1】:

    这适用于类(例如 VB 表单):

    Option Explicit
    
    Public L1 As String
    Public L2 As String
    Public L3 As String
    Public L4 As String
    
    Sub Main()
    
      L1 = "Foo"
      L2 = "Bar"
      L3 = "Go"
      L4 = "Figure"
    
      Dim i As Long
      For i = 1 To 4
        Debug.Print CallByName(Me, "L" & CStr(i), VbGet)
      Next
    
    End Sub
    

    【讨论】:

    • 谢谢!这确实是我一直在寻找的。但是,其他人的建议将在我当前的项目中使用更少的代码,我仍然想知道如何做到这一点以供将来参考。
    • CallByName 可能很有用,但我仍然认为 DrPut 需要了解数组。你知道的某一天其他人可能不得不查看他的代码:)
    • 是的,我也想到了数组。你可以说我的答案更直接。其他人只是(正确地)指出这个问题是错误的;-)
    【解决方案2】:

    你真正想要的是一个数组,像这样:

    Dim L(3) As String  ''// index begins at 0, 4 total elements
    
    For Each i As String In L
        If "Foo" <> i Then
            ''// ...
        End If
    Next i
    

    【讨论】:

    • 除非您有 OPTION BASE 1,否则您的数组将有 5 个元素(比所需元素多一个)。此外,您的 for 循环不会编译。
    • 自从我使用 vb6 以来已经很久了,但我似乎记得 base 1 是默认值?我会查找旧的 for 循环语法并修复它。
    • 它已经...呃...我只是在 VB6 中处理数组。 :) Base 默认为 0。通常,最好(当你不知道数组的边界时)这样做: For i = LBound(L) To UBound(L)
    • 好的,这至少应该是正确的。不过,我认为在这种情况下我更喜欢您的代码,因为它允许在数组节点上进行分配。
    • 那仍然不是 VB6,抱歉。您不能在 VB6 中执行“For Each i As String in L”。需要如下。 Dim L(3) As String ''// 索引从 0 开始,总共 4 个元素 Dim i As Variant For Each i In L If "Foo" i Then ''// ... End If Next i
    【解决方案3】:

    我建议您创建一个数组,而不是创建 4 个变量。例如:

    Dim L(1 To 4) As String
    
    For i = 1 to 4
        L(i) = "Whatever"
    Next
    

    【讨论】:

    • 太棒了!我会尝试一下,让你知道它是否有效。感谢您这么快的回复。
    猜你喜欢
    • 1970-01-01
    • 2021-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-08
    相关资源
    最近更新 更多