【问题标题】:vb.net dynamically create checkboxesvb.net 动态创建复选框
【发布时间】:2011-04-06 22:58:48
【问题描述】:

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

问题是我不知道如何使多个对象变暗。这是我创建一个复选框的代码

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)

它工作得很好,但我无法添加多个复选框而不必这样做:

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)

等等……

有没有办法使多个复选框变暗,而不必为每个复选框编写多个变暗语句?

对不起,也许我应该这样说..

我想做这样的事情:

 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

【问题讨论】:

    标签: vb.net checkbox


    【解决方案1】:

    似乎在CheckBox 实例之间唯一不同且未计算的项目是文本。如果是这样,那么您可以使用以下代码根据String 的列表添加一组CheckBox 实例。

    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
    

    【讨论】:

    • 这就是我要找的,但是,它在你的例子中只循环一次,而它应该循环两次?
    • @StealthRT,它会查找 data 数组中的每个值。
    • 正确,它确实说 data = 2 但它在表单(测试)上只有一个复选框,而它应该有 2?
    • @StealthRT 很可能第二个复选框不在屏幕上,或者只是隐藏在另一个复选框下方。尝试更改偏移值或将表单放大以查看其他复选框。
    • 啊,是的,我没有足够大的数字(我第一次将其设置为 50。现在 150 并显示)。谢谢!
    【解决方案2】:

    把它放在一个循环中,包括新的语句,但改变位置。

    您也可以克隆该对象,可能会降低性能...对不起,但不知道 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;
    }
    

    【讨论】:

      猜你喜欢
      • 2013-01-25
      • 1970-01-01
      • 2016-06-16
      • 1970-01-01
      • 1970-01-01
      • 2018-05-17
      • 2015-04-16
      相关资源
      最近更新 更多