КАК МОЖНО различать нажатие кнопки Событие - PullRequest
0 голосов
/ 11 июня 2010

У меня проблема.Я делаю некоторые кнопки wpf Динамический через C # .im, используя его Цикл для этого сейчас я пытаюсь найти все кнопки Нажмите событие.я нахожу это, но оно работает одинаково для всех Кнопка Нажмите, как я могу различить все кнопки.

спасибо в Advance shashank

`for (int i = 0; i < 2; i++)
        {
            Button b1 = new Button();
            //this.RegisterName("myAnimatedBrush", b1);
            b1.Name = "button" + i;     
            b1.Height = 200;
            b1.Width = 200;
            b1.Margin = new Thickness(0, -100, 0, 0);
            b1.HorizontalAlignment = HorizontalAlignment.Left;
            b1.Content = "English";
            b1.Background = System.Windows.Media.Brushes.Pink;
            b1.Click+=new RoutedEventHandler(b1_Click);
            canvasbtn.Children.Add(b1);
            Canvas.SetLeft(b1,b1.Width * i);

        }`

Ответы [ 3 ]

1 голос
/ 12 июня 2010

Мои два цента:

Если вы хотите, чтобы все кнопки, которые вы создаете в цикле, работали по-разному, подумайте о том, что отличается от самих кнопок, и проверьте это.Например:

  • Если каждая кнопка генерируется из отдельного элемента данных, задайте его DataContext и используйте его для поиска исходного элемента данных.
  • Если каждая кнопка пронумерована, установитеDataContext для номера кнопки.
  • Если каждая кнопка имеет различное значение, установите Click для разных обработчиков событий.Вы можете создать массив из них.Или прикрепите к каждой кнопке отдельный объект в качестве CommandParameter.

Ваш код будет наиболее значимым, если вы будете различать свое поведение на основе того, что заметно для конечного пользователя.

Пример:

 for(int i=0; 0<10; i++)
 {
   var btn = new Button
   {
     DataContext = i,
     Height = 200, Width = 200,
     Margin=new Thickness(0, 100, 0 0),
   });
   btn.Click += (sender, e) =>
   {
     MessageBox.Show("You clicked button " + ((Button)sender).DataContext);
   };
   dockPanel.Children.Add(btn); // Or you could use Canvas & Canvas.SetLeft
}

Я бы настоятельно рекомендовал вам использовать DockPanel вместо Canvas для этого.Если конечному пользователю не нужно произвольное позиционирование (перетаскивание), Canvas почти никогда не подходит для использования.Если вы используете DockPanel, вам не нужно устанавливать левую координату - он автоматически сделает это за вас.

0 голосов
/ 11 июня 2010

Может быть что-то вроде этого будет работать.

 protected void HandleBtnClick(object sender, EventArgs args)
        {
            Button btn = sender as Button;
            if(btn==null){ 
               return; //This is not expected.
            }
            if(btn.Name=="button1")
            {
                DoFirstTask();
            }
            else if (btn.Name == "button2")
            {
                DoSecondTask();
            }
            ...
        }
0 голосов
/ 11 июня 2010
void b1_Click(object sender, RoutedEventArgs e)
{
    Button srcButton = e.Source as Button;
}

Источник & Подробнее

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...