Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 6 odgovora
  • 2.651 pregleda

Najnovija ↓

c# - Birthday notifier - compare dates 26.11.2013. u 23:44 · pre 157 meseci #1
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>[email protected]</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?

Re: c# - Birthday notifier - compare dates 27.11.2013. u 08:42 · pre 157 meseci #2
Dovoljno je
Code:
bool rodjendanJeDanas = DateTime.Today == p.Birthday.Date;
Format date picker-a nije bitan jer ga nigde ni ne koristis.
Re: c# - Birthday notifier - compare dates 27.11.2013. u 14:17 · pre 157 meseci #3
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);
                }
            }
 
Re: c# - Birthday notifier - compare dates 27.11.2013. u 15:03 · pre 157 meseci #4
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?
Re: c# - Birthday notifier - compare dates 27.11.2013. u 16:39 · pre 157 meseci #5
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;
Re: c# - Birthday notifier - compare dates 27.11.2013. u 18:45 · pre 157 meseci #6
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);
                }
            }
 
Re: c# - Birthday notifier - compare dates 27.11.2013. u 18:56 · pre 157 meseci #7
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.
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme