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

Arrays 在vb6中将数据从数组传输到组合框,arrays,vb6,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", "Valp

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

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
快速代码检查:

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

语法上:

  • 每个If/Then块中都省略了End If语句。听起来像 如果你是一名C#程序员
  • Bicholim被用作常数, 当你可能指的是“Bicholin”的时候
  • 您已在声明了B、M和P 模块级和程序级。后者优先于后者 模块级变量
  • 程序级变量B、M和P 声明为字符串。但是,数组函数返回一个变量 类型为String()
标准VB6对象:

  • 复选框使用了错误的属性。而不是使用选中的 属性,则应使用值,该值使用以下值: vbChecked、vbUnchecked和VBGRAY
  • combo box引用被用作标准对象Combo1,但事件过程表示它是控件数组的一部分(索引为整数)。我会的 删除控件数组参数
  • Combo1.Items.Add()用于将项目添加到组合框中。它应该是:Combo1.AddItem()
  • Combo1.Items.Add用于添加 字符串数组。在VB6中不能执行此操作(在任何情况下,.NET都会使用 AddRange())
  • 正在使用Combo1.Item=Null。。。为什么?。即使 .NET WinForm复选框不使用此语法
我猜您基本上希望组合框中有不同的项,这取决于复选框的状态。我不知道您为什么要使用Combo1更改事件。听起来不太可能。相反,您可能希望响应复选框单击。因此,您提供的代码应该在一个过程中,从每个复选框单击事件过程调用

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

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
您可以通过使用复选框的控制数组来整理此问题。

快速代码检查:

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

语法上:

  • 每个If/Then块中都省略了End If语句。听起来像 如果你是一名C#程序员
  • Bicholim被用作常数, 当你可能指的是“Bicholin”的时候
  • 您已在声明了B、M和P 模块级和程序级。后者优先于后者 模块级变量
  • 程序级变量B、M和P 声明为字符串。但是,数组函数返回一个变量 类型为String()
标准VB6对象:

  • 复选框使用了错误的属性。而不是使用选中的 属性,则应使用值,该值使用以下值: vbChecked、vbUnchecked和VBGRAY
  • combo box引用被用作标准对象Combo1,但事件过程表示它是控件数组的一部分(索引为整数)。我会的 删除控件数组参数
  • Combo1.Items.Add()用于将项目添加到组合框中。它应该是:Combo1.AddItem()
  • Combo1.Items.Add用于添加 字符串数组。在VB6中不能执行此操作(在任何情况下,.NET都会使用 AddRange())
  • 正在使用Combo1.Item=Null。。。为什么?。即使 .NET WinForm复选框不使用此语法
我猜您基本上希望组合框中有不同的项,这取决于复选框的状态。我不知道您为什么要使用Combo1更改事件。听起来不太可能。相反,您可能希望响应复选框单击。因此,您提供的代码应该在一个过程中,从每个复选框单击事件过程调用

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

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
您可以通过使用复选框的控制数组来整理此问题。

快速代码检查:

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

语法上:

  • 每个If/Then块中都省略了End If语句。听起来像 如果你是一名C#程序员
  • Bicholim被用作常数, 当你可能指的是“Bicholin”的时候
  • 您已在声明了B、M和P 模块级和程序级。后者优先于后者 模块级变量
  • 程序级变量B、M和P 声明为字符串。但是,数组函数返回一个变量 类型为String()
标准VB6对象:

  • 复选框使用了错误的属性。而不是使用选中的 属性,则应使用值,该值使用以下值: vbChecked、vbUnchecked和VBGRAY
  • combo box引用被用作标准对象Combo1,但事件过程表示它是控件数组的一部分(索引为整数)。我会的 删除控件数组参数
  • Combo1.Items.Add()用于将项目添加到组合框中。它应该是:Combo1.AddItem()
  • Combo1.Items.Add用于添加 字符串数组。在VB6中不能执行此操作(在任何情况下,.NET都会使用 AddRange())
  • 正在使用Combo1.Item=Null。。。为什么?。即使 .NET WinForm复选框不使用此语法
我猜您基本上希望组合框中有不同的项目,这取决于状态o