Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка Windows Forms > Обработка события кнопки


Автор: kirillga 21.4.2008, 10:43
Доброго времени суток.

Вопрос следующий
для наглядности код
Объявляю дейстиве на клик клавы
Код

bt.MouseClick += new MouseEventHandler(VTBfrMenu_Click);


объявляю реакцию на клик ентером
Код

void bt_Click(object sender, EventArgs e)
        {
            for (int x = 0; x < VTBPlugins.Count; x++)
            {
                MessageBox.Show("Ok");                
            }   
            
        }


При выполнение кода выдаеться сообщение "Ок" но если я нажму повторно ентер для закрытия этого сообщения
мне опять вылезет оно как сделать так чтобы на повторное нажатие закрывалось сообщение??
Я понимаю что можно добавить переменную в обработчик и реагировать на второе нажатие ентера
просто хотелось бы посмотреть разные идеи и предложения.

Автор: Walker 21.4.2008, 10:45
Убрать цикл. smile 
Зачем он вообще нужен в таком контексте?

Автор: kirillga 21.4.2008, 11:25
Код

bt.MouseClick += new MouseEventHandler(VTBfrMenu_Click);


Код

void bt_Click(object sender, EventArgs e)
        {
            
            for (int x = 0; x < VTBPlugins.Count; x++)
            {
                string s = "";
                string s1 = "";
                s += "System.Windows.Forms.Button, Text: ";
                s += VTBPlugins[x].Caption;
                s1 += sender;

                if (s1 == s && s2 == 0)
                {
                    VTBPlugins[x].MenuClick();
                    s2 = 1;
                }
                else { s2 = 0; }
            }   
            
        }

Вот для чего цикл нужен чтобы обработать событие каждой кнопки потомучто я форму собираю из многих элементов
которые загружаються автоматически из дллок и не только кнопки))))
Я решил это кодом предложенным выше если есть замечания выслушаю с удовольствием)))

Автор: Walker 21.4.2008, 11:30
Так, хорошо. Тогда, как я понимаю, Вы либо уведомляете о загрузке каждого плагина, оставив MessageBox в цикле, и тогда он прозвенит столько раз, сколько плагинов Вам ответят Success. Либо выносите MessageBox за рамки цикла. И он Вас порадует успехом или огорчит неуспехом общей процедуры загрузки всех плагинов сразу. Или я неправильно понимаю задачу?

Автор: kirillga 21.4.2008, 11:56
Нет например есть 5 кнопок запакованные в дллки они подгружаються при запуске основной формы 
записываються в лист VTBPlugins у каждой кнопки есть действие в MenuClick() так  при нажатии на кнопку 
мне необходимо получить действие в MenuClick() с помощью sender определяем какая кнопка нажата и производим действие которое заданно в MenuClick() например MessageBox.Show("Ok") при этом когда выскачит сообщение 
нажав ентер оно появиться вновь вот такая вот петрушка))

Автор: vponomarov 21.4.2008, 14:23
kirillga, ok, так зачем же цикл в bt_Click делать? smile 
и вообще, при нажатии на кнопку вызывается VTBfrMenu_Click.
короче у тебя какая-то каша с именами функций и в итоге ничего не ясно smile 

Автор: kirillga 22.4.2008, 07:16
сори ошибся тут немного не так
Код

bt.Click += new EventHandler(bt_Click);

void bt_Click(object sender, EventArgs e)
        {
            
            for (int x = 0; x < VTBPlugins.Count; x++)
            {
                string s = "";
                string s1 = "";
                s += "System.Windows.Forms.Button, Text: ";
                s += VTBPlugins[x].Caption;
                s1 += sender;

                if (s1 == s && s2 == 0)
                {
                    VTBPlugins[x].MenuClick();
                    s2 = 1;
                }
                else { s2 = 0; }
            }   
            
        }


Вот так правильней надеюсь таб будет понятней

Автор: vponomarov 22.4.2008, 09:44
kirillga, так понятнее smile 
а нельзя сделать например так:
Код

void bt_Click(object sender, EventArgs e)
        {
            VTBPlugin s=(VTBPlugin)sender; //тут укажи имя своего класса
            s.MenuClick();           
        }

Автор: kirillga 23.4.2008, 08:57
Не получилось ошибку выдает(((

Автор: vponomarov 23.4.2008, 09:59
kirillga, а можно как-то подробнее? smile 
какую ошибку? в какой строке? smile 

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