2

だから私はデザインの問題を抱えています。デリゲートとイベントを持つマウス クラスがあります。つまり、MouseButtonPressed、MouseMoved です。など、状態エンジンによって呼び出されます。

私がしたいのは、IClickable や IDraggable などのインターフェイスを作成し、マウス イベントが呼び出されたときに呼び出されるインターフェイス内にイベントを設定することです。

public interface IClickable

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

次に、MouseDevice クラスにある

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

public event ButtonClickedHandler<MouseButtons, MouseState> ButtonClicked;

したがって、基本的には、buttonClicked が呼び出されたときに Clicked を呼び出したいと考えています。

これを行う方法はありますか?

4

2 に答える 2

2

このようなことを意味しますか?

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...
    }
}
于 2009-01-25T07:21:27.323 に答える
0

インターフェイス内でイベントを宣言しても、実際には呼び出すことができるイベントは作成されません。インターフェイスを実装するクラス内でそのイベントを実装する必要があります。

インターフェースにはコードを含めることができないため、クラス内のイベントを呼び出すには、実装するすべてのクラスに OnMouseClicked メソッド (またはその他のもの) を個別に追加する必要があります。OnMouseClicked をインターフェイス自体の拡張メソッドにすることもできますが、それは拡張メソッドの目的をわずかに覆しています...

于 2009-06-15T11:19:58.510 に答える