События и кнопки

#c# #events #button

#c# #Мероприятия #кнопка

Вопрос:

Я хочу получать текст кнопки всякий раз, когда я нажимаю на нее.

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

     void ListAllPage()
    {
        if (pageMax < 50)
        {
            //if page max less than 50
            for (int i = 0; i < pageMax; i  )
            {
                Button newBtn = new Button();
                newBtn.Text = i.ToString();
                newBtn.Width = 50;

                newBtn.Click  = page_Clicked;

                pageCell.Controls.Add(newBtn);
            }
        }
}
  

Теперь на экране появятся кнопки, будут запущены их события и будет выполнена функция page_Click;:

  public void page_Clicked(object sender, EventArgs e)
    {

  //inside this function I want to obtain the button number that was clicked by the user. How do I do that?
    }
  

Обратите внимание, я должен использовать все функции, которые я описал здесь,…

Я думаю передать все кнопки, которые я создал внутри цикла, в словарь.. Словарь .. он будет принимать переменные, подобные этому btndic.Add(Кнопка b= новая кнопка,b.текст);

Но проблема в том, как извлечь кнопки,,,

если есть способ получше, я хотел бы услышать об этом…

Ответ №1:

вместо того, чтобы использовать событие щелчка -> Используйте событие команды: http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.button.oncommand.aspx тогда вы сможете определить, какая кнопка была нажата

Ответ №2:

Вам просто нужно привести sender объект к Button или, в более общем смысле, к Control :

 public void page_Clicked(object sender, EventArgs e)
{
     Control c = sender as Control;
     MessageBox.Show("Clicked on "   c.Text);
}
  

Также, возможно, было бы более уместно использовать Tag свойство для хранения вашей пользовательской информации (number). В этом случае Text свойством может быть все, что угодно.

Ответ №3:

Попробуйте этот способ

 public void page_Clicked(object sender, EventArgs e)
{

   Button btn=(Button)sender;
}
  

Ответ №4:

в вашем ListAllPage методе назначьте Tag каждой кнопке:

 newBtn.Tag = i;
  

В вашем обработчике вы можете получить экземпляр кнопки из sender :

 var clickedButton = (Button)sender;
int pageIndex = (int)clickedButton.Tag;
  

Комментарии:

1. tag не имеет пространства имен. Это свойство Control : msdn.microsoft.com/en-us/library /…