0

SelectedIndexChanged イベントを設定した DropDownList があります。

move.SelectedIndexChanged += Move;

public void Move(object sender, EventArgs e)
{
}

Move メソッドに渡される引数「e」である EventArgs から派生したクラスを作成したいと思います。

public void Move(object sender, EventArgs e)
{
  MyEventArgs my_e = (MyEventArgs)e;

  int Id = my_e.ID;
  position = my_e.position;
  etc;
}

それは可能ですか?もしそうなら、イベントで使用できるこのクラス プロパティを与えることができます。

DropDownList に現在含まれている情報よりも多くの情報を Move メソッドに渡したいので、これを行う必要があります。この情報を DropDownList の ID に入れることはできますが、これは見苦しく、面倒な文字列解析が必要です。

例えば

ID = "Id_4_position_2"

注: Developer Art の要求による

リスト内の要素を移動しています。古い順序と新しい順序を知る必要があります。これを行うには、DropDownList ID を使用して古い注文を保存し、SelectedValue を使用して新しい注文を保存します。実際、必要なものはすべて揃っていますが、ID で注文するのは洗練されていないように思えます。カスタムイベントも避けたいのですが、やりすぎのようです。

代替テキスト http://www.yart.com.au/stackoverflow/move.png

4

1 に答える 1

1

それは可能ではありません。

親クラスを子クラスにキャストすることはできません。

次のような意味です。

public class MyEventArgs : EventArgs
{
}

次にEventArgs e、それを MyEventArgs に型キャストします。それはうまくいきません。

子クラスは親クラスを拡張します。つまり、より多くの肉があります。親クラスは狭いです。親クラスのオブジェクトを何らかの方法で自動的に拡張して子クラスのオブジェクトにする賢明な方法はありません。


UI コントロールをサブクラス化し、それにカスタム プロパティを追加するとどうなるでしょうか。

public class PositionDropDownList : DropDownList
{
    public int Id { get; set; }
    public int Position { get; set; }
}

これらの値は、フォームのコントロールを生成するときに設定します。次に、イベントでそれらにアクセスできます。

public void Move(object sender, EventArgs e)
{
  PositionDropDownList ddl = (PositionDropDownList)sender;

  int Id = ddl.Id;
  position = ddl.Position;
}

そのようなものはあなたのために働きますか?

于 2009-11-17T07:47:34.830 に答える