2009-01-25 24 views
2

J'ai donc un problème de conception. J'ai une classe de souris qui a des délégués et des événements. c'est-à-dire MouseButtonPressed, MouseMoved. et ceux qui sont appelés par un moteur d'état. Ce que je veux faire est de créer une interface comme IClickable ou IDraggable ou quelque chose et avoir des événements dans les interfaces qui sont appelées lorsque l'événement de souris est appelé.Comment appeler les événements dans les interfaces C#?

public interface IClickable 

public event MouseDevice.ButtonClickedHandler<MouseButtons, MouseState> Clicked; 

puis dans la classe MouseDevice il a

public delegate void ButtonClickedHandler<O, S>(object sender, InputDeviceEventArgs<O, S> e); 

et

public event ButtonClickedHandler<MouseButtons, MouseState> ButtonClicked; 

Donc, fondamentalement, je veux avoir cliquée être appelé quand ButtonClicked est appelée.

Existe-t-il un moyen de le faire?

+0

Sorry First post here, Je n'ai pas réalisé comment ça fonctionnait. Anwayways La solution d'Igor n'a pas résolu le problème. –

+0

mmmm .... pouvez-vous expliquer un peu plus loin? –

Répondre

2

Vous voulez dire quelque chose comme ça?

public class MouseDevice { 
    public delegate void ButtonClickedHandler<O, E>(O sender, E e); 
} 

public interface IClickable<O,E> { 
    event MouseDevice.ButtonClickedHandler<O,E> Clicked; 
} 

public class StateMachine : IClickable<Control,MouseEventArgs> 
{ 

    public event MouseDevice.ButtonClickedHandler<Control, MouseEventArgs> Clicked; 

    protected void OnButtonClicked(Control sender,MouseEventArgs e) { 
     if (Clicked != null){ 
      Clicked(sender, e); 
     } 
    } 
} 

public class Test { 
    public static void main(string[] args) 
    { 
     StateMachine m = new StateMachine(); 
     m.Clicked += new MouseDevice.ButtonClickedHandler<Control, MouseEventArgs>(m_Clicked); 
    } 

    static void m_Clicked(Control sender, MouseEventArgs e) 
    { 
     //Handle Click Event... 
    } 
} 
+0

@Eibach - Tout ce que vous avez à faire est d'implémenter l'interface Iclickable dans votre machine d'état :) –

+0

Vous voulez dire réellement avoir le code dans la classe de la machine d'état et ensuite quand le périphérique de la souris est appelé appeler l'événement click? –

+0

Donc, si je mets l'interface à l'intérieur de la souris, comment puis-je l'appeler à l'intérieur? –

0

Lorsque vous déclarez un événement à l'intérieur d'une interface, il ne crée pas l'événement qui peut être appelé - vous devez mettre en œuvre alors cet événement à l'intérieur des classes qui implémentent l'interface.

Comme les interfaces ne peuvent contenir aucun code, vous devrez ajouter la méthode OnMouseClicked (ou autre) dans toutes vos classes d'implémentation séparément pour appeler l'événement dans la classe. Vous pouvez également utiliser OnMouseClicked une méthode d'extension sur l'interface elle-même, mais cela est en train de subvertir les méthodes d'extension ...