Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.09.2013, 18:15   #11
Luuzuk
Форумчанин
 
Аватар для Luuzuk
 
Регистрация: 18.01.2012
Сообщений: 975
По умолчанию

Так примечание для автора, а не для вас
Увы, по ссылкам ходят немногие
Благодарить в репутацию. Проклинать — туда же
Luuzuk вне форума Ответить с цитированием
Старый 07.01.2019, 11:51   #12
alexfarm2
Новичок
Джуниор
 
Регистрация: 07.01.2019
Сообщений: 2
По умолчанию Наверное, уже не нужно, но все равно еще один пример кода

Запоздалый, но пристальный взгляд на события в консольном приложении:
Код:
namespace ConsoleApplication3
{
     delegate void MyEventHandler(object o,string str);
      class MyButton
    {
        //поле кнопки, содержащее название нажатой клавиши
        public string buttonKey;
        //объявляем  событие в классе кнопки
        //в отличие от делегата, событие может быть только членом класса
        public event MyEventHandler Click; 

        //вызвать событие можно только в классе, где оно объявлено!
        //если попробовать вызвать событие в другом классе, компилятор выдаст ошибку
        //поэтому создаем здесь (в классе кнопки) общедоступный метод для вызова события для кнопки
        //при имитации нажатия кнопки, будем вызывать это событие и передавать в него название нажатой клавиши
        public void onClick(string btnKey)
        {
            //вызываем событие
            //название нажатой кнопки можно передать в качестве аргумента тех методов, которые будут записаны в событие
            //чтобы эти методы (обработчики) могли с ним поработать
            //через this  в каждый обработчик будет передана вся информация о кнопке
            Click?.Invoke(this, btnKey);
            //можно здесь воздействовать на сам объект кнопки
            //чтобы сам объект кнопки знал, какая клавиша у него нажата
            buttonKey = btnKey+"**тра-та-та*"+ btnKey;
            Console.WriteLine("мы в методе onClick() кнопки после вызова события Click " + buttonKey);
        }   
    }
    class MyClass
    {
        public int id;
        public MyClass(int x )
        {
            id = x;
        }
        //создаем обработчик события  Click кнопки с сигнатурой делегата MyEventHandler
        public  void button_Click(object o, string str)
        {
            //здесь можно поработать с параметром str, в который будет передано название клавиши при вызове события
            Console.WriteLine("объект-владелец события: " + o.GetType().Name +
                "\n    строка, переданная в событие при его вызове (клавиша кнопки):  " + str +
                "\n    мы находимся в методе button_Click объекта " + this.GetType().Name+
                "\n    идентификатор этого объекта " + this.id
                );
            //попробуем воздействовать на объект
            id = id + o.GetType().Name.Length;
            Console.WriteLine("   измененный идентификатор  после воздействия на объект события: " + this.id);
        }
    }
    class Program
    {
        //создаем обработчик события  Click кнопки с сигнатурой делегата MyEventHandler
        public static void  button_Click(object o,string str)
        {
            //здесь можно поработать с параметром str, в который будет передано название клавиши при вызове события
            Console.WriteLine("объект-владелец события: " + o.GetType().Name +
                "\n    строка, переданная в событие при его вызове (клавиша кнопки):  " + str +
                "\n    мы находимся в статическом методе button_Click " );
        }
        static void Main(string[] args)
        {
            //создаем объект кнопки
            MyButton b = new MyButton();
            //регистрируем в событии какой-нибудь обработчик, например анонимный метод  
            b.Click += (o, p) => { Console.WriteLine("унылая пора, очей очарование  " + o.GetType().Name + "  " + p);
                Console.WriteLine("      мы находимся в блочном лямбда-выражении анонимного метода"); };
            //регистрируем в событии конкретный обработчик
            b.Click += button_Click;

            MyClass mcl = new MyClass(7);
            b.Click += mcl.button_Click;
            //имитируем нажатие кнопки
            //т.е. через доступный метод кнопки onClick() вызываем событие Click, в которое будет передан сам объект кнопки
            //и название нажатой клавиши, через параметр метода onClick()
            b.onClick("AAA3");
            Console.ReadLine();
        }
    }
}
Результат выполнения этой программы:

унылая пора, очей очарование MyButton AAA3
мы находимся в блочном лямбда-выражении анонимного метода

объект-владелец события: MyButton
строка, переданная в событие при его вызове (клавиша кнопки): AAA3
мы находимся в статическом методе button_Click

объект-владелец события: MyButton
строка, переданная в событие при его вызове (клавиша кнопки): AAA3
мы находимся в методе button_Click объекта MyClass
идентификатор этого объекта 7
измененный идентификатор после воздействия на объект события: 15

мы в методе onClick() кнопки после вызова события Click AAA3**тра-та-та*AAA3

Последний раз редактировалось alexfarm2; 08.01.2019 в 08:48. Причина: Добавил результат выполнения программы
alexfarm2 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
События azarnik93 Помощь студентам 2 31.08.2013 13:37
С# Обработчик события yulshaz Помощь студентам 7 24.09.2012 08:12
События в WPF. Обращение к компонентам формы из события Casper-SC Общие вопросы .NET 3 25.07.2010 19:03
События session Общие вопросы C/C++ 2 21.06.2010 17:16
События yarilo JavaScript, Ajax 3 28.01.2010 23:18