2017-02-10 1 views
-1

Я хотел спросить, возможно ли это событие на C#. До сих пор я не очень много работал с мероприятиями.Вызов публичного события для запуска метода в другом классе в C#

Скажем, у меня есть класс А, который подписался на FormClosing события формы:

public class A 
{ 
    private void f_FormClosed(object sender, FormClosedEventArgs e) 
    { 
    //Now here a public Event should be called 
    } 
} 

Теперь я хочу, общественное событие будет называться. Скажем, теперь у меня есть другой класс B, который имеет определенный метод.

public class B 
{ 
    public void DoSomething() 
    { 
    } 
} 

Теперь то, что я хочу сделать:

это форма закрывается так класс А получать уведомления. Там запускается публичное событие (которое находится где-то в открытом классе). Я хочу подписаться на мой метод в классе B на это событие, чтобы он вызывался, когда это происходит. Это возможно? И как синтаксис? До сих пор я не нашел ничего полезного.

Edit: я не могу создать экземпляр класса B непосредственно из класса А.

+1

Я мог бы ответить на этот вопрос, но я чувствую, что вы не реально, когда вы говорите, что вы не нашли что-то полезное в сети. События были на C# с момента его создания, поэтому есть статьи о теме с более чем 15 лет. –

+0

Да, я знаю. Все, что я нашел, это то, как инициировать события при создании экземпляра класса B в классе A. Я читал много, но все еще имею проблемы. Пожалуйста, помогите мне:/ – Canox

+0

Я действительно верю, что вы хотите, чтобы мы сэкономили ваше время и получили резюме. Там много статей о событиях. Просто используйте Google для поиска этих ключевых слов: «C# events codeproject» и посмотрите, что произойдет ... –

ответ

3

Его возможно.

  1. Создать новое событие в А.
  2. Поднять событие в EventHandler f_FormClosed
  3. Подписка на это событие в B.
  4. В EventHandler си вызова метода DoSomething

Для синтаксиса вы можете проверить: MSDN

// A delegate type for hooking up change notifications. 
    public delegate void ChangedEventHandler(object sender, EventArgs e); 

// A class that works just like ArrayList, but sends event 
// notifications whenever the list changes. 
public class ListWithChangedEvent: ArrayList 
{ 
    // An event that clients can use to be notified whenever the 
    // elements of the list change. 
    public event ChangedEventHandler Changed; 

    // Invoke the Changed event; called whenever list changes 
    protected virtual void OnChanged(EventArgs e) 
    { 
     if (Changed != null) 
     //you raise the event here. 
     Changed(this, e); 
    } 
} 

Теперь в вашем другом классе сделать что-то вроде этого

class EventListener 
    { 
    private ListWithChangedEvent List; 

     public EventListener(ListWithChangedEvent list) 
     { 
     List = list; 
     // Add "ListChanged" to the Changed event on "List". 
     //This is how we subscribe to the event created in ListWithChangedEvent class 
     List.Changed += new ChangedEventHandler(ListChanged); 
     } 

    // This will be called whenever the list changes. 
    private void ListChanged(object sender, EventArgs e) 
    { 
     Console.WriteLine("This is called when the event fires."); 
    } 
} 
+0

Как синтаксис? У меня проблемы с этим вместе. – Canox

+0

Этот пример приведен здесь https://msdn.microsoft.com/en-us/library/aa645739(v=vs.71).aspx –

+0

@Conax посмотреть EDIT как подписаться на событие –