Как получить доступ к пользовательскому классу EventArgs в событии нажатия кнопки? - PullRequest
1 голос
/ 23 марта 2011

Как результат: доступ к значениям в пользовательском классе Eventargs

Как получить доступ к публичным переменным в пользовательском классе Eventargs, используя нажатие кнопки или любой другой метод?

Пример пользовательского события Args class:

public class TraderEventArgs: EventArgs
{
    private int _shares;
    private string _symbol;

    public TraderEventArgs(int shs, string sym)
    {
        this._shares = shs;
        this._symbol = sym;
    } 

    public decimal Price 
    {
        get {return _prices;}       
    }

   public int Shares
   {
       get { return _shares; }
   }
}

Код события button_click:

public partial class _Default : System.Web.UI.Page
{
    protected void Button1_Click(object sender, EventArgs e)
    {
        // run trader app
        myApp.Main();

        // try to access TraderEventArgs class
        TraderEventArgs: EventArgs ev = TraderEventArgs: EventArgs();   // Invalid

        TraderEventArgs ev = new TraderEventArgs();   // this needs argument variables that are unassigned... ?

        TraderEventArgs ev = (TraderEventArgs)e;  //  Unable to cast object of type 'System.EventArgs' to type TraderEventArgs'.

        string sym = ev.Symbol.ToString();
        string sharws = ev.Shares.ToString();

        // do something with data

     }

спасибо за помощь.

Ответы [ 3 ]

1 голос
/ 23 марта 2011

Когда происходит событие нажатия кнопки, оно создает EventArgs, которое передается в «е». Этот объект был создан не вами, а самим фреймворком, и имеет тип EventArgs. Это лишает вас возможности привести его к другому типу.

Если вы хотите иметь событие, которое вызывает TraderEventArgs, вам нужно создать событие, предпочтительно типа EventHandler<TraderEventArgs>, и вызвать это событие где-нибудь под вашим контролем. Это позволяет вам генерировать класс правильного типа, а затем обрабатывать его (в отдельном обработчике событий) напрямую.

1 голос
/ 23 марта 2011

Вы не можете этого сделать.EventArgs события Click всегда имеет тип EventArgs;Вы не можете ожидать, что он будет иметь тип TraderEventArgs, потому что аргументы события создаются кнопкой, и кнопка ничего не знает о TraderEventArgs.Единственный способ, которым это может работать, - это создать собственный элемент управления Button, который вызывает событие с TraderEventArgs вместо EventArgs

0 голосов
/ 23 марта 2011

Решение: передать пользовательские аргументы событий через пользовательский делегат и событие, которое возвращает данные (Datatable, Array и т. Д.) ... используя любое нажатие кнопки или другое необходимое событие.

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

Core C # и .NET 3.7.Делегаты и мероприятия http://flylib.com/books/en/4.253.1.38/1/

...