当我不确切知道我需要多少个盒子时,我正试图弄清楚如何在我的表单上创建动态复选框。
问题是我不知道如何使用DIM多个对象。这是我创建一个复选框的代码
Dim checkBox As New CheckBox()
Form1.Controls.Add(checkBox)
checkBox.Location = New Point(10, 10)
checkBox.Text = "testing"
checkBox.Checked = True
checkBox.Size = New Size(100, 20)
它工作正常,但我不能添加多个checkBox而不必这样做:
Dim checkBox As New CheckBox()
Dim checkBox2 As New CheckBox()
Form1.Controls.Add(checkBox)
checkBox.Location = New Point(10, 10)
checkBox.Text = "testing"
checkBox.Checked = True
checkBox.Size = New Size(100, 20)
Form1.Controls.Add(checkBox2)
checkBox2.Location = New Point(40, 10)
checkBox2.Text = "testing2"
checkBox2.Checked = True
checkBox2.Size = New Size(100, 20)
等...
有没有办法调暗多个复选框,而不必为每个checkBoxe写多个dim语句?
对不起,也许我应该这样说..
我希望做这样的事情:
dim checkBox() as CheckBox
do until i = 50
Form1.Controls.Add(checkBox(i))
checkBox(i).Location = New Point(10, 10)
checkBox(i).Text = "testing " & i
checkBox(i).Checked = True
checkBox(i).Size = New Size(100, 20)
i += 1
loop
的
答案 0 :(得分:5)
似乎只有CheckBox
个实例之间不同且不计算的项目才是文本。如果是这样,那么您可以使用以下代码根据CheckBox
列表添加一组String
个实例。
Dim data as String() = New String() { "testing", "testing2" }
Dim offset = 10
For Each cur in data
Dim checkBox = new CheckBox()
Form1.Controls.Add(checkBox)
checkBox.Location = New Point(offset, 10)
checkBox.Text = cur
checkBox.Checked = True
checkBox.Size = New Size(100, 20)
offset = offset + 30
Next
答案 1 :(得分:0)
把它放在一个循环中,包括新的陈述但是改变了位置。
你也可以克隆这个对象,可能会有性能损失......对不起但不知道Vb.net,我会给你c#代码希望它会类似。我认为这不是针对你的情况的最佳解决方案(一个循环可以解决这个问题),但也许它适用于那些有类似但更通用的问题的人。
CheckBox CB2 = (CheckBox)CloneObject(CheckBox1);
//在此处更改位置... Form1.Controls.Add(checkBoxCB2)
private object CloneObject(object o)
{
Type t = o.GetType();
PropertyInfo[] properties = t.GetProperties();
Object p = t.InvokeMember("", System.Reflection.BindingFlags.CreateInstance, null, o, null);
foreach(PropertyInfo pi in properties)
{
if(pi.CanWrite)
{
pi.SetValue(p, pi.GetValue(o, null), null);
}
}
return p;
}