Можете ли вы установить EventArgs из элементов управления ASP.NET?
У меня есть 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 для хранения нового заказа. Так что на самом деле у меня есть все, что мне нужно, но, кажется, нелегко навести порядок в удостоверении личности. Я также хочу избежать пользовательских событий, кажется, слишком много работы.
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;
}
Будет ли что-то подобное для вас?