2011-12-22 21 views
13

button1をクリックすると、フォームに10個のボタンを作成したいと思います。下のこのコードではエラーはありませんが、どちらも問題ありません。フォームにボタンを動的に追加するにはどうすればいいですか?

private void button1_Click(object sender, EventArgs e) 
{ 
    List<Button> buttons = new List<Button>(); 
    for (int i = 0; i < buttons.Capacity; i++) 
    { 
     this.Controls.Add(buttons[i]); 
    } 
} 
+0

あなたは高さと幅を割り当てなければなりません。 –

+0

ともう一度あなたは有効な回答を得ていますが、まだそれを受け入れていないか、それが適切でない理由を説明しました。 – Adam

答えて

17

リストが空のため動作しません。これを試してみてください:

private void button1_Click(object sender, EventArgs e) 
{ 
    List<Button> buttons = new List<Button>(); 
    for (int i = 0; i < 10; i++) 
    { 
     Button newButton = new Button(); 
     buttons.Add(newButton); 
     this.Controls.Add(newButton); 
    } 
} 
3

あなたはこのような何か行うことができます:あなたがそれらが合理的なファッションの任意の並べ替えにレイアウトしたい場合は、レイアウトパネルのいずれかにそれらを追加する方が良いだろう

Point newLoc = new Point(5,5); // Set whatever you want for initial location 
for(int i=0; i < 10; ++i) 
{ 
    Button b = new Button(); 
    b.Size = new Size(10, 50); 
    b.Location = newLoc; 
    newLoc.Offset(0, b.Height + 5); 
    Controls.Add(b); 
} 

を(つまりFlowLayoutPanel)、または自分で調整することができます。

0

ボタンを新規インスタンスを作成せずに空のリストに追加することはできません。 あなたのコード内で

Button newButton = new Button(); 

が欠落しているプラ​​スあなたは任意のボタンを作成していない.Capacity

17

を取り除く、あなただけの空のリストを持っています。

リストを忘れて、ループ内にボタンを作成するだけで済みます。

private void button1_Click(object sender, EventArgs e) 
{  
    int top = 50; 
    int left = 100; 

    for (int i = 0; i < 10; i++)  
    {   
      Button button = new Button(); 
      button.Left = left; 
      button.Top = top; 
      this.Controls.Add(button);  
      top += button.Height + 2; 
    } 
} 
+0

+1 – Adam

0

まず、10個のボタンを実際に作成していません。次に、各ボタンの位置を設定する必要があります。そうでない場合は、それぞれのボタンの上に表示されます。これはトリックを行います:

for (int i = 0; i < 10; ++i) 
    { 
     var button = new Button(); 
     button.Location = new Point(button.Width * i + 4, 0); 
     Controls.Add(button); 
    } 
1

2つの問題 - リストは空です。最初にいくつかのボタンをリストに追加する必要があります。第2の問題:「this」にボタンを追加することはできません。 「これはあなたの考えを参照するものではない、と私は思う。これをたとえばPanelを参照するように変更します。 this.itよう

//Assume you have on your .aspx page: 
<asp:Panel ID="Panel_Controls" runat="server"></asp:Panel> 


private void button1_Click(object sender, EventArgs e) 
    { 
     List<Button> buttons = new List<Button>(); 


     for (int i = 0; i < buttons.Capacity; i++) 
     { 
      Panel_Controls.Controls.Add(buttons[i]); 
     } 
    } 
+0

この場合、 'this'は彼の' Form'への参照です – Adam

0

使用のボタン配列は、時間変数bcoz 3つの動的なボタンを作成します3

private void button1_Click(object sender, EventArgs e) 
{ 
int h =3; 


Button[] buttonArray = new Button[8]; 

for (int i = 0; i <= h-1; i++) 
{ 
    buttonArray[i] = new Button(); 
    buttonArray[i].Size = new Size(20, 43); 
    buttonArray[i].Name= ""+i+""; 
    buttonArray[i].Click += button_Click;//function 
    buttonArray[i].Location = new Point(40, 20 + (i * 20)); 
    panel1.Controls.Add(buttonArray[i]); 

} } 
0

の価値を持っている私は、私が来たことがある問題に関する現在の貢献で、同じ疑問に付属まで:

int altura = this.Size.Height; 
      int largura = this.Size.Width; 

      int alturaOffset = 10; 
      int larguraOffset = 10; 
      int larguraBotao = 100; //button widht 
      int alturaBotao = 40; //button height 

      for (int i = 0; i < 50; ++i) 
      { 

       if ((larguraOffset+larguraBotao) >= largura) 
       {      
        larguraOffset = 10; 
        alturaOffset = alturaOffset + alturaBotao; 
        var button = new Button(); 
        button.Size = new Size(larguraBotao, alturaBotao); 
        button.Name = "" + i + ""; 
        button.Text = "" + i + ""; 
        //button.Click += button_Click;//function 
        button.Location = new Point(larguraOffset, alturaOffset); 
        Controls.Add(button); 
        larguraOffset = larguraOffset + (larguraBotao); 
       } 
       else 
       { 

        var button = new Button(); 
        button.Size = new Size(larguraBotao, alturaBotao); 
        button.Name = "" + i + ""; 
        button.Text = "" + i + ""; 
        //button.Click += button_Click;//function 
        button.Location = new Point(larguraOffset, alturaOffset); 
        Controls.Add(button); 
        larguraOffset = larguraOffset+(larguraBotao); 

       } 

      } 

予想される動作は、これは次のボタンが右マルギを超える場合は、必ずラインを壊し、あなたのウィンドウサイズの現在の状態を使用してボタンを生成します、ということですあなたのウィンドウのn。

+0

whats larguraBotaoとalturaBotaoはどういう意味ですか? –

関連する問題