你能从ASP.NET控件设置EventArgs吗?

时间:2009-11-17 07:40:22

标签: asp.net controls eventargs

我有一个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;
}

这可能吗? 如果是,我可以给出我可以在事件中使用的这个类属性:

我需要这样做,因为我想将更多信息传递给Move方法而不是DropDownList当前包含的信息。我可以将这些信息放在DropDownList的ID中,但这很难看,需要杂乱的字符串解析。

例如

ID = "Id_4_position_2"

注意:根据Developer Art的要求

我正在列表中移动元素。我需要知道旧订单和新订单。我可以通过使用DropDownList ID来存储旧订单和SelectedValue来存储新订单。实际上,我拥有所有我需要的东西,但在ID中下订单似乎不太优雅。我也想避免自定义事件,似乎工作太多了。

alt text http://www.yart.com.au/stackoverflow/move.png

1 个答案:

答案 0 :(得分:1)

那是不可能的。

您无法将父类强制转换为子类。

你的意思是这样的:

public class MyEventArgs : EventArgs
{
}

然后你有EventArgs e并希望将其类型化为MyEventArgs。那不行。

子类扩展父类,这意味着它有更多的肉。父类是 narrower 。没有明智的方法以某种方式自动扩展父类对象成为子类对象。


如果您继承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;
}

这样的事情对你有用吗?