2016-11-17 79 views
1

我想在x * y矩阵中动态添加复选框。 我想到的最简单的方法是启动一个for循环,其中O(n²)。 我有2个文本框是矩阵的宽度和高度。 在我的例子中,我做了10x10;当我按下按钮时,它只会创建1复选框。 我第一次尝试直接添加复选框到面板,但我不知何故有一个NullReferenceException。现在我在一个List中填充for循环,然后在foreach循环中读出。在C运行时在循环中添加复选框for循环#

任何帮助,将不胜感激。

在此先感谢

m0ddixx

我试试这样:

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

你有什么问题,这个代码?我希望得到帮助,我建议在你遇到问题时总是描述问题。顺便说一下,CheckBox的位置太紧。向X和Y添加乘数 – Steve

+0

确定。问题是有一个复选框的复选矩阵的动态矩阵。显然这些LED可以打开或关闭。程序本身应该生成代码来创建基于关键帧的动画。但首先用户必须放入矩阵的宽度和高度,然后它应该在运行时生成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轴上太小,或者x不乘以20 – Steve

+2

实际上尺寸是问题。在设置ledcheck.size = new Size(15,15)后,它工作。复选框将一个不可见的文本字段放在一起,以使其重叠。无论如何感谢您的帮助! – m0ddixx