Могу ли я передать значения в функцию обработки событий? - PullRequest
0 голосов
/ 23 декабря 2011

Я хотел бы использовать функцию с параметрами в окне свойств со списком событий.этот четный список справа в Visual Studio допускает только некоторые функции с отправителем объекта и событиями e и не отображает пользовательскую функцию с параметрами.Это общее поведение или я должен искать ошибку?

Ответы [ 5 ]

1 голос
/ 23 декабря 2011

Вы можете просто использовать CommandArgument вашей кнопки.

yourButton.Click += new EventHandler(yourButton_Click); yourButton.CommandArgument = "your parameters";

и в методе обработчика событий сделайте следующее:

string yourParameters = (sender as Button).CommandArgument.ToString()

Надеюсь, это поможет.

1 голос
/ 23 декабря 2011

Написать потомок EventArgs.

, например

public class MyEventArgs: EventArgs {
    public MyEventArgs(string arg1, int arg2) {
        this.MyValue = arg1;
        this.MyNumber = arg2;
    }

    public string MyValue;
    public int MyNumber;

} 

Теперь это нормальный параметр для EventHandler, когда вы пишете один e, он будет иметь свойства MyValue и MyNumber.

0 голосов
/ 23 декабря 2011

Правильный способ использования событий в .Net заключается в следующем:

  • использовать делегата с именем, которое заканчивается на EventHandler
  • , у этого делегата ровно два параметра, sender и e.sender должен иметь тип object и содержать ссылку на экземпляр класса, вызвавшего событие.e должен иметь тип, который наследуется от EventArgs (часто EventArgs).e - это экземпляр, содержащий данные события.

Вы не должны ожидать, что найдете какую-либо другую сигнатуру обработчика событий, это всегда (object sender, XXXEventArgs e).

Обратите внимание, что при поднятиисобытия и не нужно передавать данные события, следует использовать EventArgs.Empty.

public delegate void MyEventHandler(object sender, EventArgs e);

public event MyEventHandler MyEvent;

public void OnMyEvent()
{
    if (this.MyEvent != null)
    {
        this.MyEvent(this, EventArgs.Empty);
    }
}
0 голосов
/ 23 декабря 2011

вы можете зарегистрировать обработчики только для события, которое соответствует объявлению события (подписи делегата).

Если вы хотите использовать предопределенное событие и не создавать свое собственное, вы должны следовать подписи обработчика события

0 голосов
/ 23 декабря 2011

Button.Click определяется как есть, и изменить его невозможно. Тем не менее,

yourButton.Click += delegate { YourButton_click(1); }

сделает работу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...