[ Cal Lightman @ 26.11.2013. 22:44 ] @
Pozdrav svima.

Stvar je sledeća: imam listview ispunjen kontaktima koji se čuvaju u XML file-u. XML izgleda ovako:

Code (xml):

<People>
  <Person>
    <Name>John</Name>
    <Hometown>Washington</Hometown>
    <Address>231 Main Street</Address>
    <Birthday>130299511993682082</Birthday>
    <Phone>555-555-555</Phone>
    <Email>john@gmail.com</Email>
    <AdditionalInfo>Skype: john.123</AdditionalInfo>
  </Person>
  <Person>
    <Name>123</Name>
    <Hometown>
    </Hometown>
    <Address>
    </Address>
    <Birthday>130299621669230698</Birthday>
    <Phone>
    </Phone>
    <Email>
    </Email>
    <AdditionalInfo>
    </AdditionalInfo>
  </Person>
</People>


U suštini, pokušavam da napravim da mi iskoči notify icon (balloon) svaki put kada je nekom od kontakata rođendan. Međutim, imam problem jer ne znam kako da pravilno uporedim rođendan sa današnjim datumom. Pre svega, to sam planirao da stavim u on load, dakle kad se program startuje - da li je to ok? Nešto sam tražio po Google i pokušavao i evo dokle sam stigao, dakle ovo je deo gde se kontakti učitavaju u listview:

Code (csharp):

            string path = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
            string phonebook_path = path + "\\Phonebook\\Contacts.xml";
            if (!File.Exists(phonebook_path))
            {
                XmlTextWriter xW = new XmlTextWriter(phonebook_path, Encoding.UTF8);
                xW.WriteStartElement("People");
                xW.WriteEndElement();
                xW.Close();
            }
            XmlDocument xDoc = new XmlDocument();
            xDoc.Load(phonebook_path);
            foreach (XmlNode xNode in xDoc.SelectNodes("People/Person"))
            {
                Person p = new Person();
                p.Name = xNode.SelectSingleNode("Name").InnerText;
                p.Hometown = xNode.SelectSingleNode("Hometown").InnerText;
                p.Address = xNode.SelectSingleNode("Address").InnerText;
                p.Birthday = DateTime.FromFileTime(Convert.ToInt64(xNode.SelectSingleNode("Birthday").InnerText));
                p.Phone = xNode.SelectSingleNode("Phone").InnerText;
                p.Email = xNode.SelectSingleNode("Email").InnerText;
                p.AdditionalInfo = xNode.SelectSingleNode("AdditionalInfo").InnerText;
                people.Add(p);
                listView1.Items.Add(p.Name);
                UserCount();
            }
 


pa sam ispod toga, odnosno kad se kontakti učitaju, hteo da dodam nešto ovako:

Code (csharp):
 foreach (XmlNode xNode in xDoc.SelectNodes("People/Person"))
            {
                Person p = new Person();
                p.Birthday = DateTime.FromFileTime(Convert.ToInt64(xNode.SelectSingleNode("Birthday").InnerText));
                DateTime today = DateTime.Today;
                int result = DateTime.Compare(today, p.Birthday);
                if (result == 0)
                {
                    MessageBox.Show("OK");
                }
            }
 


Dakle, hteo sam da svaki rođendan u XML-u uporedi sa današnjim datumom i da ako je rezultat isti, iskoči notify (za sad samo MessageBox.Show("OK") pa ću videti dalje. Nije mi jasno kako da ih uporedim, ako mi je dateTimePicker CustomFormat i to MMMM, dd. (yyy)

Any ideas?

[ ravni @ 27.11.2013. 07:42 ] @
Dovoljno je
Code:
bool rodjendanJeDanas = DateTime.Today == p.Birthday.Date;
Format date picker-a nije bitan jer ga nigde ni ne koristis.
[ Cal Lightman @ 27.11.2013. 13:17 ] @
Evo kako sam rešio, možda nekome pomogne:

Code (csharp):

foreach (XmlNode xNode in xDoc.SelectNodes("People/Person"))
            {
                Person p = new Person();
                p.Name = xNode.SelectSingleNode("Name").InnerText;
                p.Birthday = DateTime.FromFileTime(Convert.ToInt64(xNode.SelectSingleNode("Birthday").InnerText));
                if (DateTime.Compare(DateTime.Parse(p.Birthday.ToString()).Date, DateTime.Now.Date) >= 0)
                {
                    NotifyIcon notifyIcon = new NotifyIcon();
                    notifyIcon.Visible = true;
                    notifyIcon.Icon = this.Icon;
                    notifyIcon.BalloonTipTitle = "It's someone's birthday!";
                    notifyIcon.BalloonTipText = p.Name + " was born today!";
                    notifyIcon.ShowBalloonTip(3 * 1000);
                }
            }
 
[ Cal Lightman @ 27.11.2013. 14:03 ] @
Pokušavam da dodam nešto na fazon koliko je godina napunio - dakle da oduzmem današnji datum od rođendana, ali ne uspevam.

Evo gde sam zaglavio:

Code (csharp):
           
foreach (XmlNode xNode in xDoc.SelectNodes("People/Person"))
            {
                Person p = new Person();
                p.Name = xNode.SelectSingleNode("Name").InnerText;
                p.Birthday = DateTime.FromFileTime(Convert.ToInt64(xNode.SelectSingleNode("Birthday").InnerText)).Date;
                int age = DateTime.Now.Year - p.Birthday.Year;
                if (DateTime.Compare(DateTime.Parse(p.Birthday.Date.ToString()).Date, DateTime.Now.Date) >= 0)
                {
                    NotifyIcon notifyIcon = new NotifyIcon();
                    notifyIcon.Visible = true;
                    notifyIcon.Icon = this.Icon;
                    notifyIcon.BalloonTipTitle = "It's someone's birthday!";
                    notifyIcon.BalloonTipText = p.Name + " was born today! He/she turned: " + age;
                    notifyIcon.ShowBalloonTip(3 * 1000);
                }
            }
 


Ne znam kako da ih pravilno obuhvatim.

Je l' ima neko ideju?
[ ravni @ 27.11.2013. 15:39 ] @
Mala ispravka, umesto
Code:
bool rodjendanJeDanas = DateTime.Today == p.Birthday.Date;
treba staviti
Code:
bool rodjendanJeDanas = DateTime.Today.Month == p.Birthday.Month && DateTime.Today.Day == p.Birthday.Day;
Ova druga varijanta radi svake godine :)

Ako je nekom rodjendan, onda
Code:
int brojGodina = DateTime.Today.Year - p.Birthday.Year;
[ Cal Lightman @ 27.11.2013. 17:45 ] @
Hvala prijatelju, radi savršeno.

Evo kako izgleda na kraju:

Code (csharp):

foreach (XmlNode xNode in xDoc.SelectNodes("People/Person"))
            {
                Person p = new Person();
                p.Name = xNode.SelectSingleNode("Name").InnerText;
                p.Birthday = DateTime.FromFileTime(Convert.ToInt64(xNode.SelectSingleNode("Birthday").InnerText));
                int age = DateTime.Today.Year - p.Birthday.Year;
                bool rodjendanJeDanas = DateTime.Today.Month == p.Birthday.Month && DateTime.Today.Day == p.Birthday.Day;
                if (rodjendanJeDanas == true)
                {
                    NotifyIcon notifyIcon = new NotifyIcon();
                    notifyIcon.Visible = true;
                    notifyIcon.Icon = this.Icon;
                    notifyIcon.BalloonTipTitle = "It's someone's birthday!";
                    notifyIcon.BalloonTipText = p.Name + " was born today! He/she turned: " + age;
                    notifyIcon.ShowBalloonTip(3 * 1000);
                }
            }
 
[ Cal Lightman @ 27.11.2013. 17:56 ] @
Imam jedno pitanje.

Kako napraviti notifikaciju na ovu foru:



Da li je potrebno kreirati novi windows form, pa ga nekako smestiti dole desno, ili kako...nemam ideju uopšte.