2011-12-22 21 views
13

जब मैं बटन 1 पर क्लिक करता हूं तो मैं अपने फॉर्म पर 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

दो समस्याएं- सूची खाली है। आपको पहले सूची में कुछ बटन जोड़ने की जरूरत है। दूसरी समस्या: आप "इस" में बटन नहीं जोड़ सकते हैं। "यह" आपके विचार के संदर्भ में नहीं है, मुझे लगता है। उदाहरण के लिए पैनल को संदर्भित करने के लिए इसे बदलें।

//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

इस मामले में, 'यह' उनके 'फॉर्म' – Adam

0

उपयोग बटन सरणी की तरह this.it ज चर 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); 

       } 

      } 

अपेक्षित व्यवहार है कि, यह आपके विंडो आकार की वर्तमान स्थिति का उपयोग कर, हमेशा एक लाइन तोड़ने बटन उत्पन्न होगा जब अगले बटन सही मार्गी से अधिक होता है आपकी खिड़की के एन।

+0

का संदर्भ है जो मोटाउराबाटाओ और alturaBotao का मतलब है –

संबंधित मुद्दे