Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Программное добавление метода на нажатие кнопки 
V
    Опции темы
kinder999
Дата 17.6.2010, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 11.6.2007

Репутация: нет
Всего: нет



Доброго времени суток.

Подскажите, пожалуйста, как решить следующую проблему:
я программным методом создаю несколько кнопок (допустим 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


Подскажите, пожалуйста, как решить эту проблему...
PM MAIL   Вверх
Экскалупатор
Дата 17.6.2010, 22:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 11
Всего: 24



читать книжки по винформс. узнать что такое делегаты, события. я думаю в процессе все само на места станет.
PM MAIL ICQ   Вверх
kinder999
Дата 18.6.2010, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 11.6.2007

Репутация: нет
Всего: нет



Цитата(Экскалупатор @  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
PM MAIL   Вверх
HellMasterHaiL
Дата 18.6.2010, 14:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 181
Регистрация: 9.8.2006
Где: Россия, МО, г. Юб илейный

Репутация: нет
Всего: 1



Я бы сделал примерно так:


Код

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

PM MAIL ICQ   Вверх
kinder999
Дата 18.6.2010, 15:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 11.6.2007

Репутация: нет
Всего: нет



эм, а как это будет выглядеть на C#, я имею ввиду установка Handler?
PM MAIL   Вверх
jonie
Дата 18.6.2010, 18:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 22
Всего: 118



kinder999, button[i].Click += Button_Click;


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
kinder999
Дата 28.6.2010, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 11.6.2007

Репутация: нет
Всего: нет



Получается только так пока:
Код

 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 
PM MAIL   Вверх
Экскалупатор
Дата 28.6.2010, 21:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 11
Всего: 24



можно как то так:
Код

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());
        }

PM MAIL ICQ   Вверх
kinder999
Дата 29.6.2010, 12:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 11.6.2007

Репутация: нет
Всего: нет



Спасибо, всё работает  smile 
PM MAIL   Вверх
Экскалупатор
Дата 29.6.2010, 18:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 11
Всего: 24



да, я в курсе. если вопрос решен, то тему принято помечать как решенную.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.2507 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.