多个Adressof到1个子

时间:2013-05-26 12:49:04

标签: vb.net

我正在尝试制作动态输入表单。但要做到这一点,我需要能够将多个adressof传递给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由函数生成。 这可能吗?

2 个答案:

答案 0 :(得分:0)

使Sub处理多组合框..

在你的情况下:

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

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

答案 1 :(得分:0)

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

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

我认为这个数字只有1位数,如果没有,你可能需要调整更多。

如果名称不包含数字,这将是一种有效的配对方式