vb.net динамически создает флажки - PullRequest
1 голос
/ 01 сентября 2010

Я пытаюсь выяснить, как создать динамические флажки в моей форме, когда я точно не знаю, сколько ящиков понадоблюсь.

Проблема в том, что я не знаю, как 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)

Он работает просто отлично, но я не могу добавить более одного флажка без необходимости делать это:

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)

и т.д ...

Есть ли способ затемнить более 1 флажок вместо необходимости писать несколько операторов затемнения для каждого checkBoxe?

Извините, может быть, я должен сказать это ..

Я хочу сделать что-то вроде этого:

 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 ]

5 голосов
/ 01 сентября 2010

Кажется, что единственными элементами, которые отличаются и не рассчитываются между 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
0 голосов
/ 01 сентября 2010

Поместите его в цикл, включающий новый оператор, но изменяющий позицию.

Вы также можете клонировать объект, возможно, с потерями производительности ... Извините, но не знаете 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...