Заполните форму элементами управления на основе значения int - PullRequest
1 голос
/ 19 июля 2011

Мне было интересно, как сделать что-то вроде этого:

Мне нужно создать форму с определенным количеством кнопок на основе целочисленного значения, представляющего количество необходимых кнопок, а затем дать им свои собственные конкретные имена, чтобы у каждого из них были свои уникальные обработчики событий.

Реальным примером, о котором я могу подумать, является экран входа в Windows, где количество созданных элементов управления зависит от количества пользователей и от того, существует ли учетная запись «Гость» или нет. Как вы думаете, что они это запрограммировали?

Спасибо.

Ответы [ 2 ]

1 голос
/ 19 июля 2011
for (int i = 0; i < 5; i++)
{
  Button newButton = new Button();
  newButton.Name = "button" + i.ToString();
  newButton.Text = "Button #" + i.ToString();
  newButton.Location = new Point(32, i * 32);
  newButton.Click += new EventHandler(button1_Click);
  this.Controls.Add(newButton);
}

private void button1_Click(object sender, EventArgs e)
{
  if (((Button)sender).Name == "button0")
    MessageBox.Show("Button 0");
  else if (((Button)sender).Name == "button1")
    MessageBox.Show("Button 1");
}
0 голосов
/ 20 июля 2011

Каким-то образом вы должны определить названия всех кнопок.Я бы предложил вам создать новый строковый массив и написать имена кнопок внутри, а затем использовать их в цикле создания кнопок:

//do the same length as the for loop below:
string[] buttonNames = { "button1", "button2", "button3", "button4", "button5" };

for (int i = 0; i < buttonNames.Lenght; i++)
{
  Button newButton = new Button();
  newButton.Name = "button" + i.ToString();
  newButton.Text = buttonNames[i]; //each button will now get its own name from array
  newButton.Location = new Point(32, i * 32);
  newbutton.Size = new Size(25,100); //maybe you can set different sizes too (especially for X axes)
  newButton.Click += new EventHandler(buttons_Click);
  this.Controls.Add(newButton);
}


private void buttons_Click(object sender, EventArgs e)
{
  Button btn = sender as Button
  MessageBox.Show("You clicked button: " + btn.Text + ".");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...