2012-07-03 65 views

回答

15

是的。

Private Sub MyForm_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
    Dim MyTextbox as New Textbox 
    With MyTextbox 
     .Size = (100,20) 
     .Location = (20,20) 
    End With 
    AddHandler MyTextbox.TextChanged, AddressOf MyTextbox_TextChanged 
    MyForm.Controls.Add(MyTextbox) 
End Sub 

Friend Sub MyTextbox_Changed(sender as Object, e as EventArgs) 
    'Write code here. 
End Sub 
+3

請添加一些解釋。 –

+0

嗨,Holger,我可以在面板上添加這個嗎? –

+0

是的,你可以。每個控件都有一個Controls屬性,您可以從中添加(或刪除)控件。只要記得手動添加你想要實現的處理程序。對於您的面板,將上例中的「MyForm」替換爲面板名稱。 –

7
Dim numberOfButtons As Integer 
Dim buttons() as Button 

Private Sub MyForm_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
    Redim buttons(numberOfbuttons) 
    for counter as integer = 0 to numberOfbuttons 
     With buttons(counter) 
      .Size = (10, 10) 
      .Visible = False 
      .Location = (55, 33 + counter*13) 
      .Text = "Button "+(counter+1).ToString ' or some name from an array you pass from main 
      'any other property 
     End With 
     ' 
    next 
End Sub 

如果您要檢查該文本框有信息,或單選按鈕被點擊,就可以在一個確定按鈕,通過一個循環迭代。

如果你希望能夠點擊單個陣列的項目,讓他們響應事件,添加在Form_Load循環以下幾點:

AddHandler buttons(counter).Clicked AddressOf All_Buttons_Clicked 

然後創建

Private Sub All_Buttons_Clicked(ByVal sender As System.Object, ByVal e As System.EventArgs) 
    'some code here, can check to see which checkbox was changed, which button was clicked, by number or text 
End Sub 

,當你撥打: objectYouCall.numberOfButtons = initial_value_from_main_program

response_yes_or_no_or_other = objectYouCall.ShowDialog() 

對於單選按鈕,文本框,相同的故事,不同恩結束。

2

要將控件動態添加到窗體,請執行以下代碼。我們在這裏創建文本框控件來動態添加。

Public Class Form1 
    Private m_TextBoxes() As TextBox = {} 

    Private Sub Button1_Click(ByVal sender As System.Object, _ 
           ByVal e As System.EventArgs) _ 
           Handles Button1.Click 

     ' Get the index for the new control. 
     Dim i As Integer = m_TextBoxes.Length 

     ' Make room. 
     ReDim Preserve m_TextBoxes(i) 

     ' Create and initialize the control. 
     m_TextBoxes(i) = New TextBox 
     With m_TextBoxes(i) 
      .Name = "TextBox" & i.ToString() 
      If m_TextBoxes.Length < 2 Then 
       ' Position the first one. 
       .SetBounds(8, 8, 100, 20) 
      Else 
       ' Position subsequent controls. 
       .Left = m_TextBoxes(i - 1).Left 
       .Top = m_TextBoxes(i - 1).Top + m_TextBoxes(i - _ 
        1).Height + 4 
       .Size = m_TextBoxes(i - 1).Size 
      End If 

      ' Save the control's index in the Tag property. 
      ' (Or you can get this from the Name.) 
      .Tag = i 
     End With 

     ' Give the control an event handler. 
     AddHandler m_TextBoxes(i).TextChanged, AddressOf TextBox_TextChanged 

     ' Add the control to the form. 
     Me.Controls.Add(m_TextBoxes(i)) 
    End Sub 

    'When you enter text in one of the TextBoxes, the TextBox_TextChanged event 
    'handler displays the control's name and its current text. 
    Private Sub TextBox_TextChanged(ByVal sender As _ 
    System.Object, ByVal e As System.EventArgs) 
     ' Display the current text. 
     Dim txt As TextBox = DirectCast(sender, TextBox) 
     Debug.WriteLine(txt.Name & ": [" & txt.Text & "]") 
    End Sub 
End Class 
+0

注意其他答案是如何解釋他們的代碼的? –

+0

如果表單允許,我會將這些添加到'FlowLayoutPanel'或動態添加單元到'DataGridView'。這樣就不需要設置邊界或確切位置。很好的例子。 – Rachael

6
Public Class Form1 
    Private boxes(5) As TextBox 

    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load 
     Dim newbox As TextBox 
     For i As Integer = 1 To 5 'Create a new textbox and set its properties26.27. 
     newbox = New TextBox 
     newbox.Size = New Drawing.Size(100, 20) 
     newbox.Location = New Point(10, 10 + 25 * (i - 1)) 
     newbox.Name = "TextBox" & i 
     newbox.Text = newbox.Name 'Connect it to a handler, save a reference to the array & add it to the form control. 
     AddHandler newbox.TextChanged, AddressOf TextBox_TextChanged 
     boxes(i) = newbox 
     Me.Controls.Add(newbox) 
     Next 
    End Sub 

    Private Sub TextBox_TextChanged(sender As System.Object, e As System.EventArgs) 
     'When you modify the contents of any textbox, the name of that textbox 
     'and its current contents will be displayed in the title bar 

     Dim box As TextBox = DirectCast(sender, TextBox) 
     Me.Text = box.Name & ": " & box.Text 
    End Sub 
End Class 
相關問題