2013-04-18 3 views
3
private void createButton() 
{ 
    flowLayoutPanel1.Controls.Clear(); 

    for (int i = 0; i < 4; i++) 
    {  
     Button b = new Button(); 
     b.Name = i.ToString(); 
     b.Text = "Button" + i.ToString(); 
     flowLayoutPanel1.Controls.Add(b); 
    } 

} 
private void button1_Click(object sender, EventArgs e) 
{ 
    createButton(); 
} 

Я использовал этот код для создания некоторых кнопок во время выполнения, теперь как я могу использовать созданные кнопки для выполнения разных действий? Im kindz новое к этому так, пожалуйста, помогите мне, очень высоко ценится :)Как использовать динамически созданный Button/textBox в C# Windows Forms?

ответ

8

Вы можете назначить обработчик события к событию, нажмите:

b.Click += SomeMethod; 

SomeMethod должны иметь следующую подпись:

void SomeMethod(object sender, EventArgs e) 
+0

И более короткий пример для тех, кого это касается: 'b.Click + = (отправитель, e) => { var clickedButton = (Button) отправитель; }; '=) –

+2

@Mario Когда у вас есть анонимный обработчик событий, вы можете избежать кастования' sender' и просто закрыть его. – Servy

+0

@Servy Yepp, я знаю об этом =) Просто хотел быть более явным и показать, что такое отправитель. Я предполагал, что ОП не знал о закрытии. –

1

Когда вы создаете свою кнопку, вам необходимо подписаться на событие Click:

Button b = new Button(); 
b.Click += new EventHandler(b_Click); 
// or 
b.Click += b_Click; 
// or 
b.Click += delegate(object sender, EventArgs e) {/* any action */}); 
// or 
b.Click += (s, e) => { /* any action */ }; 

void b_Click(object sender, EventArgs e) 
{ 
    // any action 
} 

Это то, что автоматически выполняется, когда вы являетесь разработчиком в Visual Studio, и вы нажимаете на кнопку, чтобы создать метод button1_Click.
Вы можете найти в designer.cs вашей формы, вы найдете эквивалентную строку:

button1.Click += new EventHandler(button1_Click); 

Связанные вопрос:

+0

вы можете более подробно оценить это litle :) на самом деле я пытаюсь сделать простую форму, которая создает поля так, как пользователь хочет, а затем пользователь может выполнять действия между ними, например, если пользователь хочет 2 textBox, он пишет 3 и textBox создаются во время выполнения, а затем эти 2 textBox, т.е. textBox1 и textBox2, могут получить любое значение, а третий текстовый блок показывает добавленный результат. как это сделать? –

1
b.Click += delegate(object sender, EventArgs e) { 
    Button clickedButton = (Button)sender; //gets the clicked button 
}); 
+1

Вы можете упростить синтаксис только для 'b.Click + = (s, e) => {/ * code * /};' – Servy

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