現在、カスタムボタンハンドラーを構築している最中です(kinectをマウスを使用するボタンシステムに統合する必要がありました)。その後、イベント処理と呼ばれる恐ろしいことになりました。少なくとも1時間は私のことを叫んでいます。 pc:P。ハンドラーごとに複数のイベントを設定するという新しい要望に対応するためにシステムを変更する前に、私は疑問に思っていました。しかし、私は夜に降りるので、明日コンピューターを起動するときに時間を節約でき、システムがそのために設計されていない場合は試行しないことを望んでいます)
また、私がコーディングしていた前に、getInvocリストまたはそのようなものを見たことがあります。複数のデリゲートをそのリストに追加してから、そのリストを取得して、それを繰り返しますか?
以前の例で、私は人々がどこで使用したかを見ました:
public event EventHandler myEventHandler;
私は使用しなければなりませんでした:
private Dictionary<BtnEvent, Delegate> m_events;
次に、ハンドラーを追加するために次のことを行いました(私の方法ではありません)。
myObj.myEventHandler += delegate(object sender, EventArgs ea)
{
//do stuff on event
};
最初に..これを2回実行した場合、1回はfuncAで、2回目はfuncbで両方を実行しますか?または1つだけ?
次に、+ =のロジックをデリゲートに適用した場合、それは機能しますか?(ハンドラーを辞書内に格納していたため、Delegateを使用する必要がありました。これにより、列挙型を使用してハンドラーに論理的にアクセスできるようになりました)
(私のコード)
private Dictionary<BtnEvent, Delegate> m_events;
//....
m_events = new Dictionary<BtnEvent, Delegate>(6);
m_events.Add(BtnEvent.CLICK_ENTER, null);
m_events.Add(BtnEvent.CLICK_LEAVE, null);
m_events.Add(BtnEvent.CLICK_STAY, null);
m_events.Add(BtnEvent.HOVER_ENTER, null);
m_events.Add(BtnEvent.HOVER_LEAVE, null);
m_events.Add(BtnEvent.HOVER_STAY, null);
//....
public bool addHandle(BtnEvent stateToGet, Delegate function)
{
bool success = false;
if(m_events.ContainsKey(stateToGet))
{
m_events[stateToGet] = function;
}
return(success);
}
// CHANGE ABOVE TO:
public bool addHandle(BtnEvent stateToGet, Delegate function)
{
bool success = false;
if(m_events.ContainsKey(stateToGet))
{
m_events[stateToGet] += function;
}
return(success);
}
m_events[stateToGet]=関数を変更します。to m_events [stateToGet]+=関数; 次のコードを使用して、複数のイベントハンドル(addHandleに渡した関数)を呼び出せるようにしますか?
private void ExecuteEvent(BtnEvent currEvent)
{
if(m_events.ContainsKey(currEvent))
{
if(m_events[currEvent] != null)
{
m_events[currEvent].DynamicInvoke(null);
}
}
}