Vorweg: Du benutzt die Listbox zur Datenhaltung. Das ist falsch! Eine Listbox sollte immer nur dazu dienen, Daten anzuzeigen.
Du könntest z.B. so arbeiten (leider benutzt Du C# 2.0, mit 3.5 könnte man noch ein bisschen vereinfachen):
Erstmal eine Klasse für ein Geburtstagkind.
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27:
| public class Person {
private DateTime geburtstag; public DateTime Geburtstag { get { return geburtstag; } set { geburtstag = value; } }
private string name; public string Name { get { return name; } set { name= value; } }
public override string ToString() { return Geburtstag.ToString()+" "+Name; } } |
Jetzt eine Liste von Geburtstagskindern:
C#-Quelltext
1:
| List<Person> geburtstagskinder = new List<Person>(); |
Mit
Add kannst Du der Liste dann Personen hinzufügen:
C#-Quelltext
1: 2: 3: 4:
| Person christianS = new Person(); christianS.Name = "Christian S."; christianS.Geburtstag = new DateTime(1982, 4, 12); geburtstagskinder.Add(christianS); |
Und anzeigen dann mit:
C#-Quelltext
1:
| lbox.DataSource = geburtstagskinder; |
(Mit Binding-Listen und PropertyChangedNotification kann man noch mehr schicke Sachen machen, aber das geht erstmal zu weit

)
Dann kannst Du ganz bequem mit der Liste arbeiten (Vorsicht, aus dem Kopf getippt, sollte aber klappen!):
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| Person naechster = null; DateTime heute = DateTime.Now; if (geburtstagskinder.Count >= 1) naechster = geburtstagskinder[0];
if (geburtstagskinder.Count > 1) { for (int i = 1; i < geburtstagskinder.Count; i++) { DateTime compare = new DateTime(heute.Year, geburtstagskinder[i].Geburtstag.Month, geburtstagskinder[i].Geburtstag.Day); if ((compare.CompareTo(heute) >= 0) && (heute - compare) < (heute - naechster.Geburtstag) ) naechster = geburtstagskinder[i]. } } |
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".