2016-11-17 9 views
1

x * y行列にチェックボックスを動的に追加したい。 forループを開始するために私の心に来た最も簡単な方法O(n²)。 私は、マトリックスの幅と高さの2つのテキストボックスを持っています。 私の例では10x10でした。ボタンを押すと、チェックボックスが1つだけ作成されます。 まずパネルにチェックボックスを直接追加しようとしましたが、何とかNullReferenceExceptionが発生しました。今私は、forループを塗りつぶし、後でforeachループで読み込まれるList上にあります。ランタイム時にC用の四角形内のチェックボックスを追加する

ご協力いただければ幸いです。事前に

おかげで、この上

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

OK。問題は、マトリックスを複製するためのチェックボックスの動的マトリックスを持つことです。明らかに、これらのLEDは点灯または消灯することができます。プログラム自体は、キーフレームに基づいてアニメーションを作成するためのコードを生成する必要があります。最初にユーザーはその行列の幅と高さを入れなければならず、実行時にx * yチェックボックスが生成されるはずです。私の場合、チェックボックスは1つだけ作成されます。 – m0ddixx

+0

この行を次のように変更してください:_ledcheck.Location = new Point(x * 20、y * 20); _チェックボックスはあります。 – Steve

答えて

0

をあなたパネルは、その後、あなただけの単純な問題を抱えているすべてのコントロールをホストするのに十分な大きさである場合。作成したすべてのチェックボックスは、同じ場所に大まかに積み上げています。

チェックボックスが(ラジオボタンと一緒に)最小制御おそらくですが、これnotwistanding彼らは大きさを持っているし、あなたがそれらを見たい場合は、別の十分な場所で

あなたのコードをそれらを配置する必要がありません2が必要ですループ。このようなものを書くことができます

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 =新しいサイズ(15,15)それは働いた。チェックボックスは、見えないテキストフィールドを隣り合わせて重ねて表示します。とにかく助けてくれてありがとう! – m0ddixx

関連する問題