vb.net动态创建复选框

时间:2010-09-01 18:03:45

标签: vb.net checkbox

当我不确切知道我需要多少个盒子时,我正试图弄清楚如何在我的表单上创建动态复选框。

问题是我不知道如何使用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

2 个答案:

答案 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;
}