0

クラスから発生したイベントを、イベントを発生させたクラスが含まれている List<> を実装するオーナー クラスに転送する方法を知りたいと考えています。メイン クラスが呼び出さPCCControlsれ、オブジェクトが含まれていList<ControlBox>ます。それぞれControlBoxが と呼ばれるイベントを実装しButtonPushedます。

次のようなクラスにイベントを実装ControlBoxして、クラスからクラスにイベントを移動したいと思います。PCCControlsPCCControls

public delegate ControlBoxButtonPushedHandler(object sender, ControlBox controlbox);
public event ControlBoxButtonPushedHandler ButtonPushed;

私は次のものを持っています:

public class PCCControls
{
    List<ControlBox> ControlBoxes;
}  

public class ControlBox
{
    public event ButtonPushed;  

    public ProcessSub()
    {
        if(ButtonPushed != null) ButtonPushed(this, new EventArgs());
    }
}

ButtonPushedしたがって、上記のコードに基づいて、イベントをControlBoxクラスからクラスに移動し、イベントが発生した をパラメータとしてイベントにPCCControls渡したいと思います。ControlBoxButtonPushed

これはどのように達成できますか?あなたのサポートに感謝します

4

2 に答える 2

0

実際のリストが PCCControls クラスに対して非公開のままであることを確認する場合 (クライアント コードが ControlBox を直接追加/削除できないようにするため)、項目が追加または削除されたときに ControlBox の ButtonPushed イベントを購読/購読解除できます。独自のイベントを定義して、クライアント コードに転送します。このようなもの:

public class PCCControls
{
    public event EventHandler<PCCButtonPushedEventArgs> PCCButtonPushed;

    List<ControlBox> ControlBoxes;

    public void AddControlBox(ControlBox box) 
    {
        box.ButtonPushed += OnButtonPushed;
        ControlBoxes.Add(box);
    }
    public void RemoveControlBox(ControlBox box) 
    {
        box.ButtonPushed -= OnButtonPushed;
        ControlBoxes.Remove(box);
    }
    private void OnButtonPushed(object sender, EventArgs e)
    {
        var handler = PCCButtonPushed;
        if (handler != null) 
        {
           var box = (ControlBox)sender;
           handler(this, new PCCButtonPushedEventArgs(box));
        }
    }
}  

public class ControlBox
{
    public event ButtonPushed;  
    public ProcessSub()
    {
        if(ButtonPushed != null) ButtonPushed(this, new EventArgs());
    }
}
于 2012-05-27T20:57:09.250 に答える
0

あなたが何を求めているのかははっきりしていません。しかし、私は刺します。PCCControlsでイベントをサブスクライブするクラスを簡単に取得できますControlBox

public class PCCControls
{
    List<ControlBox> ControlBoxes;
// initialization of ControlBoxes done elsewhere...
    public voice SomeMethod()
    {
        ControlBoxes.ElementAt(0).ButtonPushed += controlBox_ButtonPushed;
    }
    public void controlBox_ButtonPushed(object sender, EventArgs e)
    {
        // TODO:
    }
}

それがあなたが探しているものでない場合は、詳細を提供してください。

于 2012-05-27T20:53:06.673 に答える