对事件使用具有字符串参数的委托

时间:2019-02-06 16:25:36

标签: c# events warnings

我想使用具有字符串参数的委托作为事件。生成警告,我应将事件的第一个参数声明为发送方,将第二个参数声明为事件Args。我需要清除所有警告。

//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 :(得分:-1)

如警告所述,您应遵循the Microsoft documentation中规定的事件标准模式。

首先,创建自定义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
}