2017-10-15 2 views
-1

Hallo Ich versuche ein Ereignis auszulösen, wenn das Geburtsdatum einer Person größer ist als das tatsächliche Datum.Ereignisse in C# erhöhen - Hilfe benötigt

Ich bin neu mit Ereignissen und es scheint nicht zu funktionieren.

kode ist,

namespace LibClassLuchthaven 
{ 
    public class Person 
    { 

     public DateTime Birthdate { get; set; } 

     public string Firstname { get; set; } 
     public Gender Gender { get; set; } 
     public string Name { get; set; } 

     public event EventHandler BirthdateInFuture; 

     public Person() 
     { 
      this.Birthdate = DateTime.Now; 
      this.Firstname = string.Empty; 
      this.Gender = Gender.unknown; 
      this.Name = string.Empty; 
     } 
     public Person(DateTime birthdate, string firstname, Gender gender, string name) 
     { 
      this.Birthdate = birthdate; 
      this.Firstname = firstname; 
      this.Gender = gender; 
      this.Name = name; 
     } 
     public void OnBirthdateInFuture() 
     { 

      if (BirthdateInFuture!=null) 
      { 
       if (this.Birthdate > DateTime.Now) 
       { 
        BirthdateInFuture(this, EventArgs.Empty); 
       } 

      } 

     } 


     public override string ToString() 
     { 
      return this.Name + ", " + this.Firstname + " - " + this.Birthdate + " (+" + this.Gender + ")"; 
     } 
    } 
} 

public partial class FormCrewManagement : Form 
{ 

    public Person person = new Person(); 


    public FormCrewManagement() 
    { 
     InitializeComponent(); 

     person.BirthdateInFuture += Person_BirthdateInFuture; 

    } 

    private void Person_BirthdateInFuture(object sender, EventArgs e) 
    { 
     MessageBox.Show("Birthdate is in the future"); 
    } 
+0

Was genau meinen Sie mit "scheint nicht zu funktionieren"? –

+2

Sie scheinen nirgends "OnBirthdateInFuture" aufzurufen –

+0

Sie müssen die OnBirthdateInFuture-Methoden irgendwann aufrufen. – Seb

Antwort

0

Es sieht aus wie das Problem eine logische Eins kann, anstatt etwas mit Ereignissen zu tun. Sie setzen den Geburtstag auf das heutige Datum ... und prüfen, ob es später ist. Das wird es nie sein.

public Person() 
{ 
    this.Birthdate = DateTime.Now; 

    if (BirthdateInFuture!=null) 
    { 
     if (this.Birthdate > DateTime.Now) 
     { 
      BirthdateInFuture(this, EventArgs.Empty); 
     } 
    } 
2

Versuchen Sie, die Immobilie Ändern

public DateTime Birthdate { get; set; } 

zu

private DateTime _birthDate; 
public DateTime Birthdate 
{ 
    get {return _birthDate;} 
    set 
    { 
     _birthDate=value; 
     if(value > DateTime.Now) 
     BirthdateInFuture?.Invoke(this, EventArgs.Empty); 
    } 
} 

das Ereignis Dies wird erhöhen, wenn Geburtstag Wert in Zukunft.

0

Philip, In Ihrem Code ist kein Platz, an dem das Ereignis ausgelöst wird. Sie könnten eine Eigenschaft mit dem Namen BirthDate erstellen und im Setter-Teil das Ereignis auslösen. Wenn das Geburtsdatum in ein zukünftiges Datum geändert wird, könnte/würde es das Ereignis auslösen.