在vb6中将数据从数组传输到组合框

时间:2014-02-04 11:39:31

标签: arrays vb6

就是这样 单击三个复选框中的任何一个,我需要数据从数组流到组合框我尝试创建一个数组,但我不确定它是否正确的方式她的代码:

Private B(2) As String
Private M(2) As String
Private P(2) As String

Private Sub Combo1_Change(Index As Integer)
Dim B As String
Dim M As String
Dim P As String
B = Array("Bicholim", "Valpoi")
M = Array("Mapusa", "Pernem", "Porvorim")
P = Array("Panjim", "Ponda")

If Check1.Checked = True Then
Combo1.items.Add (Bicholim)
Else 
combo1.item = Null

If Check2.Checked = True Then
Combo1.items.Add (M)
Else
Combo1.Item = Null

If Check3.Checked = True Then
Combo1.items.Add (P)
Else
Combo1.Item = Null
End Sub

1 个答案:

答案 0 :(得分:3)

快速代码审核:

首先,真是一团糟。您有VB6控件数组事件过程[Private Sub Combo1_Change(Index As Integer)]和默认命名控件[Combo1,Check1,Check2,Check3]。但是,组合添加项语法是VB.NET [Combo1.items.Add()]。

<强>句法:

  • 每个 If / Then 块中的 End If 语句。听起来像 如果你是C#程序员。
  • Bicholim 被用作常数, 当你可能的意思是“Bicholim”。
  • 您已声明 B M P at 模块级别AND在过程级别。后者优先考虑 模块级变量。
  • 程序级变量 B M P 声明为 As String 。但是, Array 函数返回 Variant 类型 String()

标准VB6对象:

  • 复选框使用了错误的属性。而不是使用 Checked 属性,您应该使用 Value ,它使用以下值: vbChecked vbUnchecked vbGrayed
  • 组合框引用用作标准对象 Combo1 ,但事件过程表明它是控件数组(Index As Integer)的一部分。我会 删除控制数组参数。
  • Combo1.Items.Add (&lt; whatever&gt;)用于向项目框添加项目。它应该是: Combo1.AddItem(&lt; whatever&gt;)
  • Combo1.Items.Add 正用于添加 字符串数组。你不能在VB6中这样做(在任何情况下,.NET都会使用 的AddRange()的)。
  • Combo1.Item =正在使用Null ......为了什么?甚至 .NET WinForm复选框不使用此语法。

我猜你在组合框中基本上想要不同的项目,具体取决于复选框的状态。我不知道你为什么要使用 Combo1 Change 事件。听起来不太可能。相反,您需要回复复选框点击。因此,您提供的代码应该在一个过程中,从每个复选框中调用单击事件过程。

到目前为止,让我们解决这个问题:

Option Explicit

Private Sub RefreshCombo()
    Dim B As Variant
    Dim M As Variant
    Dim P As Variant
    B = Array("Bicholim", "Valpoi")
    M = Array("Mapusa", "Pernem", "Porvorim")
    P = Array("Panjim", "Ponda")

    ' Remove all items from the array.
    Combo1.Clear

    If Check1.Value = vbChecked Then
        AddArrayItemsToComboBox Combo1, B
    End If

    If Check2.Value = vbChecked Then
        AddArrayItemsToComboBox Combo1, M
    End If

    If Check3.Value = vbChecked Then
        AddArrayItemsToComboBox Combo1, P
    End If
End Sub

Private Sub AddArrayItemsToComboBox(ByRef cmb As ComboBox, ByRef vasValues As Variant)

    Dim nIndex As Long

    For nIndex = 0 To UBound(vasValues)
        Combo1.AddItem vasValues(nIndex)
    Next nIndex

End Sub

Private Sub Check1_Click()
    RefreshCombo
End Sub

Private Sub Check2_Click()
    RefreshCombo
End Sub

Private Sub Check3_Click()
    RefreshCombo
End Sub

你可以通过使用一个控制数组的复选框来解决这个问题。