-1

我正在尝试制作动态输入表单。但要做到这一点,我需要能够将多个地址传递给 1 个子。这可能吗?这是我的代码:

    Public Function AddNewcombobox() 'As System.Windows.Forms.ComboBox
    Dim cmbSoort As New System.Windows.Forms.ComboBox()

    Me.Controls.Add(cmbSoort)
    cmbSoort.Top = cLeft
    cmbSoort.Left = 62
    cmbSoort.Items.Add("Maak een keuze")
    cmbSoort.Items.Add("Behuizingen")
    cmbSoort.Items.Add("Moederborden")
    cmbSoort.Items.Add("Processoren")
    cmbSoort.Items.Add("Grafische kaarten")
    cmbSoort.Items.Add("Geheugen")
    cmbSoort.Items.Add("DVD/Blu-ray")
    cmbSoort.Items.Add("Harddisks")
    cmbSoort.Items.Add("SSD")
    cmbSoort.Items.Add("Voedingen")
    cmbSoort.Items.Add("Invoerapparaten")
    cmbSoort.Items.Add("Monitoren")
    cmbSoort.SelectedIndex = 0
    cmbSoort.Name = "Soort" & mintI
    AddHandler cmbSoort.SelectedIndexChanged, AddressOf IndexVeranderd
    Return cmbSoort
End Function

Public Sub AddNewName()
    Dim cmbName As New System.Windows.Forms.ComboBox()

    Me.Controls.Add(cmbName)
    cmbName.Top = cLeft
    cmbName.Left = 292
    cmbName.Items.Add("Maak een keuze")
    cmbName.Name = "Naam" & mintI
    cmbName.Enabled = False
    CmbPrijs.Enabled = False
    txtStuks.Enabled = False
    'AddHandler AddNewcombobox.SelectedIndexChanged, AddressOf IndexVeranderd
    cLeft = cLeft + 40
    mintI += 1
End Sub

Private Sub cmbNaam_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs)
    'CmbPrijs.SelectedIndex = CmbNaam.SelectedIndex
End Sub

Private Sub IndexVeranderd(ByVal sender As System.Object, ByVal e As System.EventArgs)
    Dim ComboVeranderd = DirectCast(sender, ComboBox)
    Dim combonaam = DirectCast(sender, ComboBox)
    MsgBox(combonaam.ToString)
    If ComboVeranderd.SelectedIndex = 0 Then
        'ComboNaam.Enabled = False
        txtStuks.Enabled = False
    End If
    For i = 0 To EasybyteDataSet.Stock.Rows.Count - 1
        If ComboVeranderd.SelectedItem = EasybyteDataSet.Stock.Rows(i)("Soort") Then
            'ComboNaam.Enabled = True
            txtStuks.Enabled = True
            'ComboNaam.Items.Add(EasybyteDataSet.Stock.Rows(i)("Product naam"))
            CmbPrijs.Items.Add(EasybyteDataSet.Stock.Rows(i)("Prijs"))
        End If
    Next
End Sub

当 cmbSoort 的索引发生变化时,它应该将 cmbSoort 和 cmbName 都发送到子 IndexVeranderd。诀窍是,当用户按下按钮时,函数会生成 cmbSoort 和 cmbName。这可能吗?

4

2 回答 2

0

制作一个子句柄多组合框..

在你的情况下:

Public Sub AddNewcombobox()
  Dim cmbSoort as New ComboBox
  Dim cmbName as New ComboBox

  '.......... fill cmbSoort properties

  '.......... fill cmbName properties

  Controls.Add(cmbSoort)
  AddHandler cmbSoort.SelectedIndexChanged, AddressOf IndexVeranderd
  Controls.Add(cmbname)
  AddHandler cmbName.SelectedIndexChanged, AddressOf IndexVeranderd
End Sub

和子处理程序

Private Sub IndexVeranderd(ByVal sender As System.Object, ByVal e As System.EventArgs)

  Select Case oCB
    Case cmbSoort
      ' ................. code here

    Case cmbName
      ' ................. code here 

  End Select

End Sub
于 2013-05-26T14:10:07.447 回答
0

如果名称相同,则名称似乎会添加一个数字,以便 Soort1 与 Naam1 绑定,然后将数字分开并直接访问控件。这样,您只需要 cmbSoort 的处理程序。

Dim ComboVeranderd = DirectCast(sender, ComboBox)
Dim combonaam = Me.Controls("Naam"+ComboVeranderd.Name.Substring(ComboVeranderd.Name.Length-1))

我假设这个数字只有 1 位数,如果不是,你可能需要调整更多。

如果名称不包含数字,这将是配对它们的有效方法

于 2013-05-27T06:18:30.600 回答