2

ユーザーがボタンをクリックすると、次のイベントがアクティブになります。

flightWindow.SendAirplaneLand += onAirplaneStartSend; 
flightWindow.SendAirplaneTakeOff += onAirplaneTakeOffSend;
flightWindow.SendAirplaneChangeRoute += onAirplaneChangeRouteSend;

そして、それらはすべて、リストに情報を追加するためにさまざまなメソッドを呼び出します。

public void onAirplaneStartSend(object sender, Land e)
    {
        listBoxFlightEvents.Items.Add(e.LandStatus);
    }

    public void onAirplaneTakeOffSend(object sender, TakeOff e)
    {
        listBoxFlightEvents.Items.Add(e.TakeOffStatus);
    }

    public void onAirplaneChangeRouteSend(object sender, ChangeRoute e)
    {
        listBoxFlightEvents.Items.Add(e.ChangeRouteStatus);
    }

私の問題は、このすべての情報を1行のテキストにまとめてリストに追加したいということです。これを行うための簡単な解決策を探していますか?

1つの方法は、メソッドに文字列を返させ、すべての返される文字列値の文字列をまとめて、次のようにリストに追加することです。

public string onAirplaneStartSend(object sender, Land e)
    {
        return e.LandStatus;
    }

しかし、彼はおそらく不可能で便利ではありませんか?

4

1 に答える 1

3
flightWindow.SendAirplaneLand += (s,e) => {
  OnAirplaneStatusChange(e.LandStatus);
};
flightWindow.SendAirplaneTakeOff += (s,e) => {
  OnAirplaneStatusChange(e.TakOffStatus);
};
flightWindow.SendAirplaneChangeRoute += (s,e) => {
  OnAirplaneStatusChange(e.ChangeRouteStatus);
};

private void OnAirplaneStatusChange(string status)
{
  listBoxFlightEvents.Items.Add(status);
}

あなたが何をしようとしているのか、まだ完全にはわかりませんが。LandTakeOffおよびChangeRouteすべてがいくつかの共通 (eg) AirplaceEventArgs(およびステータスを示す共通のプロパティ) を継承しない限り、それらを個別にバインドする必要があります。最良のケースは一般的なメソッドを使用することですが、値EventArgsを取得するには何らかの方法でキャストする必要があります。LandStatusTakeOffStatusChangeRouteStatus

私はお勧めします:

public class AirplaneEventArgs : EventArgs
{
  public string Status { get; set; }
}
public class TakeOffEventArgs : AirplaneEventArgs
{
  /* other properties */
}
public class LandEventArgs : AirplaneEventArgs
{
  /* other properties */
}
public ChangeRouteEventArgs : AirplaneEventArgs
{
  /* other properties */
}

次に、簡単にバインドできます。

flightWindow.SendAirplaneLand += OnAirplaneStatusChange; 
flightWindow.SendAirplaneTakeOff += OnAirplaneStatusChange;
flightWindow.SendAirplaneChangeRoute += OnAirplaneStatusChange;

private void OnAirplaneStatusChange(object sender, AirplaneEventArgs e)
{ 
    // they all now share "Status" proeprty so no need to cast to
    // get "LandStatus" vs. "ChangeRouteStatus" vs. "TakeOffStatus"
    // values.
    listBoxFlightEvents.Items.Add(e.Status);
}
于 2012-08-10T18:49:26.040 に答える