Visual Basic 2010 Express Editionのインベントリを作成しています。私は在庫に必要なフィールドの数を知らない。私の希望は、プログラムのforループを使ってテキストボックス/チェックボックス/ボタンを追加できるということでした。ツールボックスを使わずにフォームにコントロールを追加する方法はありますか?VB.netのフォームにプログラムでコントロールを追加する方法
コントロールをプログラムでインスタンス化して追加できますか?
Visual Basic 2010 Express Editionのインベントリを作成しています。私は在庫に必要なフィールドの数を知らない。私の希望は、プログラムのforループを使ってテキストボックス/チェックボックス/ボタンを追加できるということでした。ツールボックスを使わずにフォームにコントロールを追加する方法はありますか?VB.netのフォームにプログラムでコントロールを追加する方法
コントロールをプログラムでインスタンス化して追加できますか?
はい。
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
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
あなたは情報を持っているテキストボックスのどのチェックするために、またはクリックされたラジオボタン、[OK]ボタンでループを繰り返し処理することができますしたい場合。
次の個々の配列の項目をクリックして、それらがイベントに応答する必要があり、の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()
ラジオボタン、テキストボックス、同じストーリーは異なるエンディング。
コントロールをフォームに動的に追加するには、次のコードを実行します。ここでは、動的に追加するテキストボックスコントロールを作成しています。
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
その他の回答が実際にコードを説明する方法に注目してください。 –
フォームを許可している場合、これらを 'FlowLayoutPanel'に追加するか、' DataGridView'に動的にセルを追加します。そうすれば、境界や正確な場所を設定する必要はありません。いい例。 – Rachael
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
いくつかの説明を追加してください。 –
こんにちは、Holger、これをパネルに追加できますか? –
はいできます。すべてのコントロールには、コントロールを追加(または削除)できるコントロールプロパティがあります。実装したいハンドラを手動で追加してください。パネルの場合は、上の例の「MyForm」をパネル名に置き換えます。 –