Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Программное добавление метода на нажатие кнопки


Автор: kinder999 17.6.2010, 14:28
Доброго времени суток.

Подскажите, пожалуйста, как решить следующую проблему:
я программным методом создаю несколько кнопок (допустим 30), мне надо подвесить вызов метода по нажатию каждой кнопке, которому передаётся определённое значение. Я пытался это реализовать так:

Код

delegate void mkQdelegate(int value);


for (int i = 0; i < ListQ.Length; i++)
            {
                // Создаём кнопку
                Button bt = new Button();
                bt.Name = "bt" + ListQ[i].ToString();                
                bt.Content = "Вопрос №" + (i+1).ToString();
                mkQdelegate mkQ = new mkQdelegate(mk_question(ListQ[i]));
                bt.Click += new RoutedEventHandler(mkQ(ListQ[i]));
                wpQlist.Children.Add(bt);
            }

 public void mk_question(int qID)
        {
// Код
        } 



в итоге ошибка 
Код

Method name expected


Подскажите, пожалуйста, как решить эту проблему...

Автор: Экскалупатор 17.6.2010, 22:58
читать книжки по винформс. узнать что такое делегаты, события. я думаю в процессе все само на места станет.

Автор: kinder999 18.6.2010, 14:19
Цитата(Экскалупатор @  17.6.2010,  22:58 Найти цитируемый пост)
узнать что такое делегаты, события. я думаю в процессе все само на места станет. 

Читаю msdn.
Прочитал про делегаты и события, я никак не могу понять, как это применить в моём случае:
Когда есть метод:
Код

public void mk_question(int qID)
        {
// Код
        }   

и программно создаются кнопки:
Код

for (int i = 0; i < 100; i++)
            {
                // Создаём кнопку
                Button bt = new Button();    
bt.Content = (i+1).ToString();
            }

мне нужно повесить на событие нажатия кнопки событие вызова метода mk_question с параметром.

 smile

Автор: HellMasterHaiL 18.6.2010, 14:31
Я бы сделал примерно так:


Код

Private Sub Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) 

       'код
       Dim lcId as Integer = Sender.Tag

End Sub


соответственно цикл примерно:

Код

Dim lcButton as Button
For i as integer = 0 to 100

      lcButton = New Button()
      lcButton.Tag = i+1
      AddHandler lcButton.Click, AddressOf Button_Click

Next

Автор: kinder999 18.6.2010, 15:46
эм, а как это будет выглядеть на C#, я имею ввиду установка Handler?

Автор: jonie 18.6.2010, 18:14
kinder999, button[i].Click += Button_Click;

Автор: kinder999 28.6.2010, 15:27
Получается только так пока:
Код

 for (int i = 0; i < 100; i++)
            {
                // Создаём кнопку
                Button bt = new Button();
                bt.Click += new RoutedEventHandler(bt_Click);
            }

void bt_Click(object sender, RoutedEventArgs e)
        {
            mk_question(1);
        }

public void mk_question(int qID)
        {
// Код
        }


Как мне передать в bt_Click значение переменной i?

помогите, пожалуйста, решить эту проблему, бьюсь над ней уже сколько времени  smile 

Автор: Экскалупатор 28.6.2010, 21:22
можно как то так:
Код

for (int i = 0; i < 100; i++)
            {
                // Создаём кнопку
                Button bt = new Button();
                bt.Tag = i;
                bt.Click += new EventHandler(this.bt_Click);
            }
        

        public void bt_Click(object sender, EventArgs e)
        {
            mk_question((int)(sender as Button).Tag);
        }

        
        public void mk_question(int qID)
        {
            MessageBox.Show(qID.ToString());
        }

Автор: kinder999 29.6.2010, 12:12
Спасибо, всё работает  smile 

Автор: Экскалупатор 29.6.2010, 18:20
да, я в курсе. если вопрос решен, то тему принято помечать как решенную.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)