Este problema então vai um pouco além do EventHandler. Provalvelmente alguem mais entendido em programação vai dizer que há forma melhor de fazer isto. Eu agradeço, mas esta foi a forma como consegui resolver o que precisava.
Comecemos pelo início:
1º - Convem perceberes que código o Visual C# gera ao colocar um botão (ou o objecto da Toolbox que quiseres usar, vamos supor que é um botão)
a) Coloca um botão na tua form de forma normal e faz duplo click nele para o programa criar o EventHandler tb,
b) Vais ver o código do formdesigner que foi gerado pelo botão. Gera logo uma série de linhas para declarar o botão, declarar o nome, definir o tamanho, a posição, etc.
podes até copiar este código para um ficheiro de texto, para depois ir buscá-lo mais facilmente. Podes apagar o botão que criaste.
Código:
this.button1 = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// button1
//
this.button1.Location = new System.Drawing.Point(12, 12);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(75, 23);
this.button1.TabIndex = 0;
this.button1.Text = "button1";
this.button1.UseVisualStyleBackColor = true;
this.button1.Click += new System.EventHandler(this.button1_Click);
2º - Pô-los no form
a)no form principal, declaras um array (ou matriz) de botões (como global)
Código:
Button[] botoes = new button[nºde botões]
no método Form_Load(), constróis o array no ecrã com um for (recorrendo ao código que guardaste, só tens de alterar umas ceninhas, como retirar o this):
Código:
for (i = 0; i < nºbotões; i++)
{
botoes[i] = new Button();
botoes[i].Name = "botao" + i;
botoes[i].Size = new System.Drawing.Size(75,23);
....
botoes[i].Click += new System.EventHandler(Botoes_Click);
}
Notas: quanto ao nome, o iterador i é uma maneira de dares uma propriedade única ao botão, de forma a poderes distinguí-lo dos outros quando for clickado; a localização de cada um, pode ser definido dentro do for se a distância entre eles for sempre regular, senão defines uma a uma com botoes[0].Location = new System.Drawing.Point(12,12); botoes[1].Location = ...; Desta maneira, com o EventHandler a ser sempre o mesmo, ele vai receber como argumento o botão que foi clickado.
No código do form, vais então criar o método Eventhandler com o nome que puseste entre-parenteses, e da seguinte forma:
Código:
private Void Botoes_Click (object sender, EventArgs e)
Lá dentro vais ter de declarar uma variável que receba as propriedades do botão que invocou a função:
Código:
Button variavel = (Button) sender;
a partir daqui podes fazer o que quiseres como:
Código:
if variavel.Name = "botao0"
método0();
else if variavel.Name = "botao1"
método1();
assim, quando o user clicka num, botão sabes que está a chamar o método correspondente.
Espero que te tenha clarificado, foi um pouco difícil de transcrever isto para o que querias que as minhas necessidades eram um pouco diferentes ( um tabuleiro de xadrez com uma classe que herda de PictureBoxes), mas a filosofia é a mesma. Qualquer coisa apita, se quiseres tb te mando o código do que fiz, para veres melhor como posicionei as cenas no ecrã, etc.
Não te esqueças que tb podes criar uma classe que herde de Button e acrescentes as propriedades e os métodos que quiseres.
Fica bem