2017-03-17 7 views
0

フォームに可変数のComboBoxを追加する必要があり、後でComboBoxから入力を読み取る必要があります。フォームに複数のコンボボックスを動的に追加し、追加されたコンボボックスの入力を読み込みますか?

私は、これは

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click 
     Dim n As Integer = Int(QsnNo.Text) 
     Dim i As Integer = 0 
     Do While i <= n 
      ComboGen(i) 
      i = i + 1 
     Loop 
    End Sub 

    Public Function ComboGen(ByVal n As Integer) 
     Dim newCombo As New ComboBox 
     With newCombo 
      .Name = "MyComboBox" & n.ToString 
      .Left = 10 
      .Top = 10 + (20 * n) + 20 
      .Width = 70 
      .Height = 20 
      .Items.Add("A") 
      .Items.Add("B") 
      .Visible = True 
     End With 
     Me.Controls.Add(newCombo) 
     Return 0 
    End Function 

をコード - そして、私はコンボボックスを追加することができます持っています。しかし、後でButton2をクリックすると、コンボボックスからの入力を読みたいと思います。それはできません。どうやってやるの?

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles 

    Button2.Click 
      TextBox1.Text = MyComboBox1.selectedItem 
     End Sub 

このような出力が必要です。

答えて

1

作成する各コンボボックスにイベントハンドラを追加できます。これにより、実行時にすべてのコンボボックスプロパティを簡単に使用できます。

全例:

Public Class Form1 
    Dim intTop As Integer = 1 
    Dim strText As String 
    Dim cmb As ComboBox 

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
     AddNewTextBox() 
     AddHandler cmb.GotFocus, AddressOf cmb_Click 
    End Sub 

    Public Function AddNewTextBox() As ComboBox 
     cmb = New ComboBox 
     Me.Controls.Add(cmb) 
     cmb.Top = intTop * 25 
     cmb.Left = 10 
     cmb.Text = "ComboBox " & Me.intTop.ToString 
     intTop = intTop + 1 
     Return cmb 
    End Function 

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click 
     TextBox1.Text = strText 
    End Sub 

    Private Sub cmb_Click(sender As Object, e As EventArgs) 
     strText = sender.Text 
    End Sub 

End Class 
1

あなたは、その名前でのコントロールにアクセスすることができます:あなたは何ができるか

MsgBox(Me.Controls("MyComboBox" & intYourComboBoxNumber).SelectedItem) 
1

は、フォームのクラスでList(Of ComboBox)を宣言しています。

Private ComboBoxes As New List(Of ComboBox) 

これでできることは、動的に作成されたComboBoxを作成時にそのリストに追加することです。

ComboBoxes.Add(newCombo) 

は、それが配置されていないとして、あなたはたとえば、行うことができます限り、後でこの時に呼び出すには:

TextBox1.Text = ComboBoxes(0).SelectedItem ' Rather than 1, do 0 - zero-based index. 
また

False、しかし、あなたは成功した場合、ブール、Trueを返すようにTry/Catchであなたのコードをカプセル化することができない場合は - あなたはいつも0を返し、決して「正しい」結果を取得しているではないFunctionとして - ComboGenSubしなければならないことに注意してください。

Public Function ComboGen(ByVal n As Integer) As Boolean 
    Try ' Start of your Try/Catch block. 
     Dim newCombo As New ComboBox 
     With newCombo 
      .Name = "MyComboBox" & n.ToString 
      .Left = 10 
      .Top = 10 + (20 * n) + 20 
      .Width = 70 
      .Height = 20 
      .Items.Add("A") 
      .Items.Add("B") 
      .Visible = True 
     End With 
     ComboBoxes.Add(newCombo) ' Add your ComboBox to the list. 
     Me.Controls.Add(newCombo) 
     Return True 
    Catch ex As Exception ' Catch your exception. 
     Return False 
    End Try ' End the Try/Catch block. 
End Function 
関連する問題