0

我有一个 DropDownList 我设置了 SelectedIndexChanged 事件:

move.SelectedIndexChanged += Move;

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

我想创建一个派生自 EventArgs 的类,它是传递给 Move 方法的参数“e”。

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"

注意:根据开发者艺术的要求

我正在移动列表中的元素。我需要知道旧订单和新订单。我可以通过使用 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 回答