2016-11-17 10 views
1

Я хочу динамически добавлять флажки в x * y-матрицу. Самый простой способ, с которым я пришел, начать цикл for, который идет O (n²). У меня есть 2 TextBox, которые предназначены для ширины и высоты матрицы. В моем примере я сделал 10x10; Когда я нажимаю кнопку, он просто создает 1 флажок. Сначала я попытался напрямую добавить флажок в панель, но у меня как-то появилось исключение NullReferenceException. Теперь я нахожусь в списке, который заполняет цикл for и считывается после этого в цикле foreach.Добавить CheckBoxes во время выполнения в цикле для цикла в C#

Любая помощь будет оценена по достоинству.

Заранее спасибо

m0ddixx

Моя Try на это:

namespace LED_Matrix_Control 
{ 
public partial class Form1 : Form 
{ 
    private LedMatrix ledMatrix; 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     int width= Convert.ToInt32(breiteFeld.Text); 
     int height = Convert.ToInt32(hoeheFeld.Text); 
     List<CheckBox> ledchecks = new List<CheckBox>(); 
     ledMatrix = new LedMatrix(breite, hoehe); 
     for(int x = 0; x < breite; x++) 
     { 
      for(int y = 0; y < hoehe; y++) 
      { 
       ledchecks.Add(addCheckBox(x, y)); 
      } 
     } 
     foreach(CheckBox finalLedChk in ledchecks) 
     { 
      panel1.Controls.Add(finalLedChk); 
     } 
    } 
    private CheckBox addCheckBox(int x, int y) 
    { 
     CheckBox ledcheck = new CheckBox(); 
     ledcheck.Location = new Point(x, y); 
     return ledcheck; 
    } 
} 
} 
+0

Какая проблема у вас с этим кодом? Я хочу, чтобы мне помогли, я предлагаю всегда описывать проблему по мере ее возникновения. Кстати, расположение ваших CheckBoxes слишком плотно. Добавьте множитель в X и Y – Steve

+0

OK. Проблема состоит в том, чтобы иметь динамическую матрицу флажков для тиражирования светодиодной матрицы. Очевидно, что эти светодиоды могут быть включены или выключены. сама программа должна генерировать код для создания анимаций на основе ключевых кадров. но сначала пользователь должен установить ширину и высоту этой матрицы, а затем он должен генерировать x * y флажки во время выполнения. в моем случае он создает только один флажок. – m0ddixx

+0

Измените эту строку на: _ledcheck.Location = new Point (x * 20, y * 20); _ Ваши флажки там, они только один над другим. – Steve

ответ

0

Если панель является достаточно большой, чтобы разместить все элементы управления, то у вас есть только простая задача. Вы складываете все созданные флажки примерно в одном месте.

Флажок, вероятно, наименьший контроль (вместе с радиокнопки), но notwistanding этого они имеют размер, и если вы хотите увидеть их, вы должны расположить их в другом месте достаточно

вас код не требует двух петли. Вы могли бы написать что-то вроде этого

for(int x = 0; x < breite; x++) 
    { 
     for(int y = 0; y < hoehe; y++) 
     { 
      CheckBox ledcheck = new CheckBox(); 
      ledcheck.Location = new Point(x * 20, y * 20); 
      ledcheck.Size = new Size(15,15); 
      panel1.Controls.Add(ledcheck); 
     } 
    } 

Также рассмотрите возможность использования TableLayoutPanel. Этот элемент управления предоставляет некоторую форму сетки, которая поможет вам автоматически позиционировать ваши флажки.

Например

Form f = new Form(); 
TableLayoutPanel tlp = new TableLayoutPanel(); 
tlp.RowCount = 5; // <= this should come from user input 
tlp.ColumnCount = 5; // <= this should come from user input 

tlp.Dock = DockStyle.Fill; 

for (int x = 0; x < 5; x++) 
{ 
    for (int y = 0; y < 5; y++) 
    { 
     CheckBox ledcheck = new CheckBox(); 
     // No need to position the checkboxes..... 
     // ledcheck.Location = new Point(x * 20, y * 20); 
     ledcheck.Size = new Size(15,15); 
     tlp.Controls.Add(ledcheck); 
    } 
} 
f.Controls.Add(tlp); 
f.Show(); 
+0

http://imgur.com/Y5DTrL9 это то, как он выглядит – m0ddixx

+0

Это странно. Или ваша панель слишком мала в X axys или x не умножается на 20 – Steve

+2

Фактически размер был проблемой. после установки ledcheck.size = new Size (15,15) он сработал. флажки закрывают невидимое текстовое поле рядом друг с другом, чтобы оно перекрывалось. спасибо за помощь в любом случае! – m0ddixx

 Смежные вопросы

  • Нет связанных вопросов^_^