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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Один обработчик событий для разных событий 
:(
    Опции темы
Alexandr507
Дата 24.1.2010, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Дан следующий код 

Код

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication39
{
    public class MessageArrivedEventArgs : EventArgs 
    {
        private string message;
        public string Message
        {
            get
            {
                return message;
            }
        }
        public MessageArrivedEventArgs() 
        { 
            message = "No message sent."; 
        } 
        public MessageArrivedEventArgs(string newMessage) 
        { 
            message = newMessage; 
        } 
         

    }
}


Код

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication39
{
    public class Display
    {
        public void DisplayMessage(object source, EventArgs e)
        {
            if (source is Connection)
            {
                Console.WriteLine("Message arrived from: {0}", ((Connection)source).Name); 

                Console.WriteLine("Message Text: {0}", ((MessageArrivedEventArgs)e).Message); 
            }
        } 

    }
}



Код

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Timers;

namespace ConsoleApplication39
{
public delegate void MessageHandler(object source, EventArgs e); 

    public class Connection
    {
        public event MessageHandler MessageArrived;

        private string name;
        public string Name
        {
            get
            {
                return name;
            }
            set
            {
                name = value;
            }
        } 


        private Timer pollTimer;
        public Connection()
        {
            pollTimer = new Timer(100);
            pollTimer.Elapsed += new ElapsedEventHandler(CheckForMessage);
        }
        public void Connect()
        {
            pollTimer.Start();
        }
        public void Disconnect()
        {
            pollTimer.Stop();
        }
        private static Random random = new Random();
        private void CheckForMessage(object source, ElapsedEventArgs e)
        {
            Console.WriteLine("Checking for new messages.");
            if ((random.Next(9) == 0) && (MessageArrived != null))
            {
                MessageArrived(this, new MessageArrivedEventArgs("Hello Mum! "));
            }
        }
    }
}


Код

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication39
{
    class Program
    {
        static void Main(string[] args)
        {
            Connection myConnection1 = new Connection();
            myConnection1.Name = "First connection.";
            Connection myConnection2 = new Connection();
            myConnection2.Name = "Second connection."; 

            Display myDisplay = new Display();
            myConnection1.MessageArrived += new MessageHandler(myDisplay.DisplayMessage);
            myConnection2.MessageArrived += new MessageHandler(myDisplay.DisplayMessage);
            myConnection1.Connect();
            myConnection2.Connect();
            Console.ReadKey();
        } 

    }
}



И дано вот такое задание

Цитата

Напишите с использованием универсального синтаксиса (object sender, 
EventArgs e) код обработчика событий, способного принимать от  
приведенного ранее в этой главе кода либо событие Timer .Elapsed, либо событие 
Connection.MessageArrived. Этот обработчик должен выводить на экран  
строку, сообщающую о том, событие какого типа было получено, вместе со свойством 
Message параметра MessageArrivedEventArgs или свойством SignalTime  
параметра ElapsedEventArgs в зависимости от того, какое событие произошло. 


Насколько я понял, нужно в конструкторе класса Conneсtion к событию Timers.Elapsed  привязать 
в качестве обработчика событий метод DisplayMessage класса Display
копировать реализацию метода  CheckForMessage, удалить его из класса Connection  за ненадобностью, а его скопированную реализацию вставить в метод DisplayMessage класса Display, один и тот же метод обрабатывает оба события, нужно еще задать условия при которых выполнялся нужный участок метода, 

ну да еще  получается рекурсия

Вот примерно как видеться  решение , но чего то не хватает,уважаемые программисты, надеюсь на помощь
PM MAIL   Вверх
KuMa1104
Дата 24.1.2010, 22:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 541
Регистрация: 16.4.2009
Где: Ростов-на-Дону

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



Alexandr507 код я не смотрел. 
Если вас интересует то как сделать один обработчик для разных событий, то можете просто создатьwindows form app 

Киньте на него 2 кнопки, кликните на них. вам студия код сгенирирует

Код

this.button1.Click += new System.EventHandler(this.button1_Click);
this.button2.Click += new System.EventHandler(this.button2_Click);


и обработчики
Код

        private void button1_Click(object sender, EventArgs e)
        {
              MessageBox.Show("1");
        }

        private void button2_Click(object sender, EventArgs e)
        {
             MessageBox.Show("1");
        }


Взгляните на то как они определены. Замените для 2го this.button2_Click на this.button1_Click и увидете результат))




--------------------
Галактика – суровая штука. Чтобы в ней выжить, надо знать, где твое полотенце.

Время - штука относительная... а время обеда - ещё более относительная
PM MAIL   Вверх
Alexandr507
Дата 25.1.2010, 16:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



KuMa1104,Спасибо конечно) но вопрос был немного другого типа, если посмотрите код, поймете)
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

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


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

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


 




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


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

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