|
■No68174 (海犬 さん) に返信
> と書いていますが、上記のTextbox部分を動的に変更するにはどのようにすればよいのでしょうか?
何のためにでしょうか?
.designer.vb 相当のコードを自動生成するためのツールと言う意味であれば、CodeDOM を使う手があります。
Imports System
Imports System.IO
Imports System.CodeDom
Public Class Form1
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
Dim var As New CodeVariableDeclarationStatement(GetType(TextBox), "ctrl",
New CodeObjectCreateExpression(New CodeTypeReference(GetType(TextBox))))
Using sw As New StringWriter()
'Dim cp As New Microsoft.CSharp.CSharpCodeProvider()
Dim cp As New Microsoft.VisualBasic.VBCodeProvider()
cp.GenerateCodeFromStatement(var, sw, Nothing)
sw.Flush()
TextBox1.Text = sw.ToString()
End Using
End Sub
End Class
あるいは、実行時に動的生成することが目的の場合は、変数を As Control 等で受けるようにしておき、
Activator.CreateInstance で生成するとか。
Public Class Form1
Private x As Control
Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles Me.Load
ComboBox1.Items.Add("System.Windows.Forms.TextBox")
ComboBox1.Items.Add("System.Windows.Forms.Button")
ComboBox1.Items.Add("System.Windows.Forms.CheckBox")
ComboBox1.DropDownStyle = ComboBoxStyle.DropDownList
ComboBox1.SelectedIndex = 0
End Sub
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
If x IsNot Nothing Then
Controls.Remove(x)
x.Dispose()
End If
Dim typeName As String = CStr(ComboBox1.SelectedItem)
Dim t As Type = GetType(Control).Assembly.GetType(typeName, True)
x = DirectCast(Activator.CreateInstance(t), Control)
x.Text = "Sample"
x.Visible = True
x.Location = New Point(30, 30)
Controls.Add(x)
End Sub
End Class
|