Можете ли вы установить EventArgs из элементов управления ASP.NET? - PullRequest
0 голосов
/ 17 ноября 2009

У меня есть DropDownList, чье событие SelectedIndexChanged я установил:

move.SelectedIndexChanged += Move;

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

Я хотел бы создать класс, производный от EventArgs, который является аргументом "e", который передается методу Move.

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_4_position_2"

Примечание: по требованию разработчика Art

Я перемещаю элементы в списке. Мне нужно знать старый порядок и новый порядок. Я могу сделать это, используя идентификатор DropDownList для хранения старого заказа и SelectedValue для хранения нового заказа. Так что на самом деле, у меня есть все, что мне нужно, но, кажется, нелегко навести порядок в удостоверении личности. Я также хочу избежать пользовательских событий, кажется, слишком много работы.

альтернативный текст http://www.yart.com.au/stackoverflow/move.png

1 Ответ

1 голос
/ 17 ноября 2009

Это невозможно.

Вы не можете привести родительский класс к дочернему классу.

Вы имеете в виду что-то вроде этого:

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;
}

Будет ли что-то подобное работать для вас?

...