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

Using a delegate having a string parameter for an event

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

//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();
  }
}   

正如警告所说,您应该遵循 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
}