Использование делегата, имеющего строковый параметр для события - PullRequest
0 голосов
/ 06 февраля 2019

Я хочу использовать делегата с параметром строки в качестве события.Появляется предупреждение о том, что я должен объявить первые параметры моего события как отправителя, а вторые параметры как аргументы события.Мне нужно убрать все мои предупреждения.

//the declaration of my delegate   
public delegate void saisieDateTime(string dateTime); 
public event saisieDateTime EventSaisieDate;


private void button_valider_Click(object sender, EventArgs e)
{
  if (Year.Text != "" && Months.Text != "" && Day.Text != "" && Hour.Text 
!= "" && Min.Text != "" && Sec.Text != "")
    Datestr = Day.Text + "/" + Months.Text + "/" + Year.Text + "  " + 
Hour.Text + ":" + Min.Text + ":" + Sec.Text;

  else
  {
    Datestr = "";
    MessageBox.Show("Format invalide");
  }
   //I call the event
  if (EventSaisieDate != null)
  {
    EventSaisieDate(Datestr);
    this.Close();
  }
  else if (EventSaisieDateTime != null)
  {
    EventSaisieDateTime(Datestr);
    Close();
  }
}   

1 Ответ

0 голосов
/ 06 февраля 2019

Как сказано в предупреждении, вы должны следовать стандартному шаблону для событий, изложенному в документации Microsoft .

Сначала создайте свой собственный подкласс EventArgs:

public class SaisieDateEventArgs : EventArgs
{
    public string Date { get; }
    public class SaisieDateEventArgs(string date)
    {
        Date = date;
    }
}

Тогда ваше событие объявляется как:

public event EventHandler<SaisieDateEventArgs> EventSaisieDate;

И поднимается как:

EventSaisieDate?.Invoke(this, new SaisieDateEventArgs(Datestr);

Вы подписываетесь на него так:

something.EventSaisieDate += HandleSaisieDate;

Где:

private void HandleSaisieDate(object sender, SaisieDateEventArgs args)
{
    // Look at args.Date
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...