コード例 #1
0
        /// <summary>
        /// Zpracování kliknutí na odeslat, kdy se odešlou data, pokud je vše OK
        /// </summary>
        private void buttonOdeslat_Click(object sender, EventArgs e)
        {
            if (comboBoxTyp.SelectedIndex == -1) // Byl vybrán typ?
            {
                Obecne.ZobrazZpravu("Nevybral jsi zda se jedná o chybu, návrh nebo připomínku!", "Problém", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            if (richTextBoxZprava.Text == "") // Prázdné zprávy přece posílat nebudeme
            {
                Obecne.ZobrazZpravu("Prázdnou zprávu nelze poslat!", "Problém", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            string odpoved = Obecne.PosliDataNaWeb("aplikace=ukolnik&typ=" + comboBoxTyp.SelectedIndex + "&zprava=" + Obecne.OdstranProblemoveHTTPPOSTZnaky(richTextBoxZprava.Text), "http://sqee.eu/programy/ukolnik/formular.php");

            if (odpoved == "DONE") // Pokud se odeslání zdařilo, tak zavřít formulář
            {
                this.Close();
            }
            else if (odpoved == "ERROR") // Pokud nastala chyba během odesílání, tak již info bylo zobrazeno a tudíž není co zobrazovat
            {
                return;
            }
            else // Jinak zobrazit info o nezdaru
            {
                Obecne.ZobrazZpravu("Zprávu se nepodařilo odeslat, zkus to znovu", "Problém", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
コード例 #2
0
 /// <summary>
 /// Obsluha události pokusu o zavření Hlavního okna, kdy uživatel musí potvrdit zavření hlavního okna (tím pádem i Úkolníku)
 /// </summary>
 private void HlavniOkno_FormClosing(object sender, FormClosingEventArgs e)
 {
     if (Nastaveni.StavAplikace == (int)Nastaveni.StavyAplikace.bezici && e.CloseReason.ToString() == "UserClosing")  // Zavírá uživatel? (Například když OS zavírá při vypínání, tak by to neuměl ukončit bez pomoci)
     {
         DialogResult odpoved = Obecne.ZobrazZpravu("Opravdu chceš ukončit Úkolník?", "Opravdu to chceš?", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
         if (odpoved == System.Windows.Forms.DialogResult.No) // Nechce zavřít okno, takže to zrušíme
         {
             e.Cancel = true;
             return;
         }
     }
     alarm.Vypnout(); // Vypneme alarm, už nebude třeba
     Obecne.ZmenaVeSvatcich  -= AktualizujSvatky;
     Obecne.ZmenaVUdalostech -= AktualizujKalendarNasilne;
 }
コード例 #3
0
ファイル: Program.cs プロジェクト: Sqeee/ukolnik
        static void Main()
        {
            bool prvniOtevreni; // Zda je toto první otevření Úkolníku nebo už je otevřen

            System.Threading.Mutex m = new System.Threading.Mutex(true, "Ukolnik", out prvniOtevreni);
            if (prvniOtevreni == false) // Pokud to není první otevření tak zobrazíme info, získáme proces již běžícího Úkolníku, získáme aktvní okno a to se pokusíme přenést do popředí
            {
                Obecne.ZobrazZpravu("Úkolník je již spuštěn.", "Vícenásobné spuštění není dovoleno", MessageBoxButtons.OK, MessageBoxIcon.Information);
                System.Diagnostics.Process[] procesy = System.Diagnostics.Process.GetProcessesByName("Ukolnik");
                SetForegroundWindow(procesy[0].MainWindowHandle);
                return;
            }
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Nastaveni.NastavStavAplikace((int)Nastaveni.StavyAplikace.bezici); // Úkolník běží normálně
            Nastaveni.NastaveniOtevreno = false;                               // Nastavovací okno nebylo otevřeno
            Application.Run(new Start());                                      // Spustíme startovací okno, kde se provedou nezbytné věci
            if (Nastaveni.StavAplikace == (int)Nastaveni.StavyAplikace.bezici) // Pokud je vše v pořádku, tak se spustí okno s přehledem a po jeho zavření již hlavní okno
            {
                Application.Run(new Prehled(true));
                Application.Run(new HlavniOkno());
            }
        }
コード例 #4
0
        /// <summary>
        /// Provádí jednotlivé akce a zobrazuje postup
        /// </summary>
        private void Start_Load(object sender, EventArgs e)
        {
            Nastaveni.NastavPodrobnostiVyjimek(true);                           // V tuto chvíli nejsou načteny data z konfiguráku, takže je zapnuto vypisování vyjímek
            if (System.IO.Directory.Exists(Nastaveni.SlozkaNastaveni) == false) // Existuje složka, kde má být uložen konfigurák? Pokud ne, tak se pokusí vytvořit
            {
                try
                {
                    System.IO.Directory.CreateDirectory(Nastaveni.SlozkaNastaveni);
                }
                catch (Exception exc)
                {
                    Vyjimky.VypisVyjimek("Nepodařilo se vytvořit tuto cestu: " + Nastaveni.SlozkaNastaveni, exc);
                    Nastaveni.NastavStavAplikace((int)Nastaveni.StavyAplikace.koncici); // Vynucené okamžité ukončení aplikace
                    this.Close();
                    return;
                }
            }
            if (System.IO.File.Exists(Nastaveni.SlozkaNastaveni + Nastaveni.SouborNastaveni) == false) // Existuje konfigurák? Pokud ne, tak ho vytvořit (v té době je ochrana proti zobrazování chyb), pokud ano, tak ho přečíst
            {
                try
                {
                    Nastaveni.PraveVytvorenKonfigurak = true;
                    Nastaveni.VytvorNastaveni();
                }
                catch (Exception exc)
                {
                    Vyjimky.VypisVyjimek("Nepodařilo se vytvořit konfigurační soubor v této složce: \n" + Nastaveni.SlozkaNastaveni, exc);
                    Nastaveni.NastavStavAplikace((int)Nastaveni.StavyAplikace.koncici); // Vynucené okamžité ukončení aplikace
                    this.Close();
                    return;
                }
            }
            else
            {
                if (Nastaveni.CtiNastaveni() == false)
                {
                    if (DialogResult.Abort == new Aktualizace().ShowDialog()) // Zda nedošlo k chybě při aktualizaci
                    {
                        Obecne.ZobrazZpravu("Nezdařila se konfigurace aplikace po provedení aktualizace, aplikace nemůže dál pokračovat a bude tudíž ukončena. Opětovné spuštění by mělo problém vyřešit. Pokud ne, tak jsou na vině internetové problémy, které snad brzo budou vyřešeny.", "Problém s konfigurací", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        Nastaveni.NastavStavAplikace((int)Nastaveni.StavyAplikace.koncici);
                        this.Close();
                        return;
                    }
                }
            }
            progressBarStart.Value += 1;
            if (Nastaveni.StavAplikace != (int)Nastaveni.StavyAplikace.bezici) // Pokud nastala chyba při čtení konfiguráku
            {
                this.Close();
                return;
            }
            new System.Threading.Thread(Nastaveni.OdesliChybovySoubor).Start(); // Pokusí se odeslat soubor s chybama - má vlastní vlákno, aby nezdržovalo start aplikace
            progressBarStart.Value += 1;
            Databaze db = new Databaze();

            db.Dotaz("UPDATE udalosti SET Splneno=1 WHERE Splneno=0 AND Typ=" + ((int)Obecne.UdalostiTypy.udalost).ToString() + " AND Kdy <= NOW();");       // Staré události automaticky splnění (když se mělo něco udát, tak se to událo)
            progressBarStart.Value += 1;
            alarm.AlarmKontrola();                                                                                                                           // Aktivuje alarm, aby se upozornilo na případné blížící se události
            progressBarStart.Value += 1;
            db.Dotaz("SELECT COUNT(*) as Pocet FROM udalosti WHERE Splneno=0 AND Typ=" + ((int)Obecne.UdalostiTypy.ukol).ToString() + " AND Kdy <= NOW();"); // Získá nesplněné úkoly, který už měly být splněny
            while (db.DalsiVysledek())
            {
                if (db.DejVysledekInt("Pocet") > 0) // Pokud jsou nesplněné úkoly, které měly být splněny, tak se zobrazé dialog s jejich výpisem
                {
                    StareUdalosti okno = new StareUdalosti((int)Obecne.UdalostiTypy.ukol);
                    okno.ShowDialog();
                }
            }
            progressBarStart.Value += 1;
            db.Dotaz("SELECT COUNT(*) as Pocet FROM udalosti WHERE Splneno=0 AND Typ=" + ((int)Obecne.UdalostiTypy.pisemka).ToString() + " AND Kdy <= NOW();"); // Získá nesplněné písemky, který už měly být splněny
            while (db.DalsiVysledek())
            {
                if (db.DejVysledekInt("Pocet") > 0) // Pokud jsou nesplněné písemky, které měly být splněny, tak se zobrazé dialog s jejich výpisem
                {
                    StareUdalosti okno = new StareUdalosti((int)Obecne.UdalostiTypy.pisemka);
                    okno.ShowDialog();
                }
            }
            progressBarStart.Value += 1;
            Obecne.PametNadpis      = new AutoCompleteStringCollection(); // Vytvoříme novou nápovědní kolekci nadpisů
            db.Dotaz("SELECT DISTINCT Nadpis FROM udalosti;");            // Získáme unikátní nadpisy a ty postupně přidáváme do kolekce
            while (db.DalsiVysledek())
            {
                Obecne.PametNadpis.Add(db.DejVysledekString("Nadpis"));
            }
            progressBarStart.Value += 1;
            db.Close();                        // Zavře databázové spojení, uvolní zdroje
            Obecne.PripravNarozeninyPrehled(); // Připravíme narozeniny pro zobrazení (aby seděly přechody roků)
            alarm.Vypnout();                   // Vypne upozorňování na blížíce se události
            progressBarStart.Value += 1;
            this.Close();                      // Zavře okno
        }
コード例 #5
0
        /// <summary>
        /// Pokud bylo kliknuto na uložit, tka je třeba data uložit, uloží se vše, nesledují se změny
        /// </summary>
        private void buttonUlozit_Click(object sender, EventArgs e)
        {
            if (textBoxNadpis.Text == "") // Zda není prázdný nadpis (nebo jméno), protože to není dovolené
            {
                Obecne.ZobrazZpravu("Nadpis (nebo jméno) nemůže být prázdný!", "Pozor", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            if (comboBoxTyp.SelectedIndex == (int)Obecne.UdalostiTypy.narozeniny) // Pokud jsou vybrány narozeniny
            {
                try
                {
                    int rokNarozeni = Convert.ToInt32(textBoxZprava.Text); // Pokusíme se získat rok narození z textu, přinejhorším vyhodíme vyjimku
                    rokNarozeni        = Math.Abs(rokNarozeni);            // Záp**né roky nebereme
                    textBoxZprava.Text = rokNarozeni.ToString();           // Upravený rok narození vložíme zpátky do Zprávy
                }
                catch                                                      // Pokud se převod nezdařil, tak se zobrazí info o tom
                {
                    Obecne.ZobrazZpravu("Nebyl zadán platný rok narození!", "Pozor", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }
            }
            alarm.Vypnout(); // Vypne se alarm, protože nyní už to nemá co zastavit to ukládání
            string nadpis = textBoxNadpis.Text;

            nadpis = Obecne.OdstranProblemoveZnaky(nadpis); // Odstraníme znaky z nadpisu, jen ty které by mohly dělat problémy, případně je nahradíme vhodnějšími
            string zprava = textBoxZprava.Text;

            zprava = Obecne.OdstranProblemoveZnaky(zprava); // Odstraníme znaky z textu, jen ty které by mohly dělat problémy, případně je nahradíme vhodnějšími
            int hodiny;
            int minuty;

            if (comboBoxTyp.SelectedIndex != (int)Obecne.UdalostiTypy.narozeniny)  // Pokud nejsou narozeniny, tak se pokusíme získat čas konání
            {
                try
                {
                    hodiny = Convert.ToInt32(textBoxCasHodina.Text); // Pokusíme se získat z textu hodinu konání
                    hodiny = hodiny % 24;                            // Převedeme ji na normální rozmezí
                }
                catch
                {
                    hodiny = 0; // Když se nám převod nezdařil, tak hodin bude nula
                }
                try
                {
                    minuty = Convert.ToInt32(textBoxCasMinuta.Text); // Pokusíme se získat z textu minutu konání
                    minuty = minuty % 60;                            // Převedeme ji na normální rozmezí
                }
                catch
                {
                    minuty = 0; // Když se nám převod nezdařil, tak minut bude nula
                }
            }
            else // Pro narozeniny bude nula minut a nula hodin
            {
                hodiny = 0;
                minuty = 0;
            }
            if (hodiny < 0) // Hodiny nemohou být záp**né, takže budou nejméně nula
            {
                hodiny = 0;
            }
            if (minuty < 0) // Ani minuty nemohou být záp**né, takže budou také nejméně nula
            {
                minuty = 0;
            }
            monthCalendar.SelectionStart = monthCalendar.SelectionStart.AddHours(hodiny);   // Získané hodiny zaznamenáme do kalendáře
            monthCalendar.SelectionStart = monthCalendar.SelectionStart.AddMinutes(minuty); // Získané minuty zaznamenáme do kalendáře
            DateTime upozorneni;

            if (radioButtonVlastni.Checked == true)                                                                                                                // Pokud si chce sám zvolit dobu upozornění
            {
                upozorneni = new DateTime(dateTimePickerUpozorneni.Value.Year, dateTimePickerUpozorneni.Value.Month, dateTimePickerUpozorneni.Value.Day, 0, 0, 0); // Získáme ji z dateTimePickeru
                try
                {
                    hodiny = Convert.ToInt32(textBoxCasHodinaUpozorneni.Text); // Pokusíme se získat z textu hodiny
                    if (hodiny < 0)                                            // Hodiny nesmějí být záp**né, nejméně nulové musejí být
                    {
                        hodiny = 0;
                    }
                    hodiny = hodiny % 24;                                      // Také by mělý být ve správném rozmezí
                    minuty = Convert.ToInt32(textBoxCasMinutaUpozorneni.Text); // Pokusíme se získat z textu minuty
                    if (minuty < 0)                                            // Minuty nesmějí být záp**né, nejméně nulové musejí být
                    {
                        minuty = 0;
                    }
                    minuty = minuty % 60; // Také by měly být ve správném rozmezí
                }
                catch                     // Když se nějaký převod nepovedl, tak hodiny nastavíme na nula, minuty dle upozornění dopředu (ale záp**né, aby se dobře odečítaly od doby konání), upozornění se bude čerpat z doby konání
                {
                    hodiny     = 0;
                    minuty     = Nastaveni.UpozorneniDopredu * -1;
                    upozorneni = new DateTime(monthCalendar.SelectionStart.Year, monthCalendar.SelectionStart.Month, monthCalendar.SelectionStart.Day, monthCalendar.SelectionStart.Hour, monthCalendar.SelectionStart.Minute, monthCalendar.SelectionStart.Second); // Získáme dobu konání
                }
            }
            else // Pokud chceme automatické upozornění
            {
                upozorneni = new DateTime(monthCalendar.SelectionStart.Year, monthCalendar.SelectionStart.Month, monthCalendar.SelectionStart.Day, monthCalendar.SelectionStart.Hour, monthCalendar.SelectionStart.Minute, monthCalendar.SelectionStart.Second); // Získáme dobu konání
                hodiny     = 0;                                // S hodinami nebudeme hýbat
                minuty     = Nastaveni.UpozorneniDopredu * -1; // Minuty budou mít automatickou hodnotu dle Upozornění dopředu a zápornou pro lepší odečítání
            }
            upozorneni = upozorneni.AddHours(hodiny);          // K době upozornění přidáme hodiny
            upozorneni = upozorneni.AddMinutes(minuty);        // K době upozornění přidáme minuty
            if (upozorneni > monthCalendar.SelectionStart)     // Pokud by doba upozornění byla až po události, tak jí nastavíme automaticky před událost
            {
                upozorneni = new DateTime(monthCalendar.SelectionStart.Year, monthCalendar.SelectionStart.Month, monthCalendar.SelectionStart.Day, monthCalendar.SelectionStart.Hour, monthCalendar.SelectionStart.Minute, monthCalendar.SelectionStart.Second);
                upozorneni = upozorneni.AddMinutes(Nastaveni.UpozorneniDopredu * -1);
            }
            string upozornit;

            if (radioButtonVlastni.Checked == true) // Je zvoleno vlastní upozornění?
            {
                if (upozorneni <= DateTime.Now)     // Pokud už to upozornění mělo proběhnout, tak se nastaví jako proběhlé, jinak jako vlastní neproběhlé
                {
                    upozornit = ((int)Obecne.UpozorneniTypy.upozornenoVlastni).ToString();
                }
                else
                {
                    upozornit = ((int)Obecne.UpozorneniTypy.upozornitVlastni).ToString();
                }
            }
            else if (radioButtonAno.Checked == true)
            {
                if (upozorneni <= DateTime.Now) // Pokud už to upozornění mělo proběhnout, tak se nastaví jako proběhlé, jinak jako automatické neproběhlé
                {
                    upozornit = ((int)Obecne.UpozorneniTypy.upozornenoAutomaticky).ToString();
                }
                else
                {
                    upozornit = ((int)Obecne.UpozorneniTypy.upozornitAutomaticky).ToString();
                }
            }
            else // Je zvoleno neupozorňovat? Tak se nastaví neupozorňování
            {
                upozornit = ((int)Obecne.UpozorneniTypy.neupozornit).ToString();
            }
            if (upozorneni.Year < dateTimePickerUpozorneni.MinDate.Year) // Pokud by byla událost na hranici zobrazení dateTimePickeru, tak automatické upozornění by mohlo způsobit, že by při úpravě hlásil neplatnost data dateTimePicker, takže datum dostaneme do požadovaného rozmezí
            {
                upozorneni = upozorneni.AddYears(dateTimePickerUpozorneni.MinDate.Year - upozorneni.Year);
            }
            Databaze db = new Databaze();

            if (Nadpis != textBoxNadpis.Text) // Pokud se předchozí nadpis neshoduje s novým, tak zjišťujeme, jestli starý nadpis používala i jiný událost, pokud nepoužívala, tak starý nadpis je smazán z kolekce, pak také se zjišťuje, zda nový nadpis byl používán jinou událostí, pokud nebyl, tak se vloží do kolekce
            {
                db.Dotaz("SELECT COUNT(*) AS Pocet FROM udalosti WHERE Nadpis='" + Nadpis + "';");
                while (db.DalsiVysledek())
                {
                    if (db.DejVysledekInt("Pocet") < 2)
                    {
                        Obecne.PametNadpis.Remove(Nadpis);
                    }
                }
                db.Dotaz("SELECT COUNT(*) AS Pocet FROM udalosti WHERE Nadpis='" + textBoxNadpis.Text + "';");
                while (db.DalsiVysledek())
                {
                    if (db.DejVysledekInt("Pocet") == 0)
                    {
                        Obecne.PametNadpis.Add(textBoxNadpis.Text);
                    }
                }
            }
            if (comboBoxTyp.SelectedIndex == (int)Obecne.UdalostiTypy.narozeniny) // Pokud ukládáme narozeniny, tak se nastaví rok 4
            {
                monthCalendar.SelectionStart = monthCalendar.SelectionStart.AddYears(4 - monthCalendar.SelectionStart.Year);
            }
            db.Dotaz("UPDATE udalosti SET Typ=" + comboBoxTyp.SelectedIndex.ToString() + ", Nadpis='" + nadpis + "', Zprava='" + zprava + "', Kdy='" + monthCalendar.SelectionStart.ToString("yyyy-MM-dd HH:mm:ss") + "', Splneno=" + comboBoxSplneno.SelectedIndex.ToString() + ", Upozorneno=" + upozornit + ", Upozorneni='" + upozorneni.ToString("yyyy-MM-dd HH:mm:ss") + "' WHERE ID=" + Udalost.ToString() + ";"); // Všechno to uložíme
            db.Close();
            if (comboBoxTyp.SelectedIndex == ((int)Obecne.UdalostiTypy.narozeniny))                                                                                                                                                                                                                                                                                                                                       // Pokud je nově upravená událost narozeninama, tak si to uložíme (ukládáme jen pro případ narozenin, protože ta stará mohla být narozeniny, ale byl jí změněn typ na něco jinýho, ale i tak je třeba udělat aktualizaci svátků)
            {
                Typ = (int)Obecne.UdalostiTypy.narozeniny;
            }
            this.DialogResult = System.Windows.Forms.DialogResult.Yes; // Nastavíme Yes, protože došlo ke změně události
            this.Close();
        }
コード例 #6
0
        /// <summary>
        /// Obsluha události kliknutí na Uložit ve formuláři pro nové události
        /// </summary>
        private void buttonUlozit_Click(object sender, EventArgs e)
        {
            if (comboBoxTyp.SelectedIndex == -1) // Nic nebylo vybráno? Něco se vybrat musí
            {
                Obecne.ZobrazZpravu("Nevybral jsi typ události!", "Pozor", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            if (textBoxNadpis.Text == "") // Má ta událost nějaký název? Nějak se to musí přece jmenovat
            {
                Obecne.ZobrazZpravu("Nadpis (nebo jméno) nemůže být prázdný!", "Pozor", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            if (comboBoxTyp.SelectedIndex == (int)Obecne.UdalostiTypy.narozeniny) // Jsou to narozeniny?
            {
                try
                {
                    int rokNarozeni = Convert.ToInt32(textBoxZprava.Text); // Pokusíme se získat rok narození z textu, přinejhorším vyhodíme vyjimku
                    rokNarozeni        = Math.Abs(rokNarozeni);            // Záp**né roky nebereme
                    textBoxZprava.Text = rokNarozeni.ToString();           // Upravený rok narození vložíme zpátky do Zprávy
                }
                catch                                                      // Pokud se převod nezdařil, tak se zobrazí info o tom
                {
                    Obecne.ZobrazZpravu("Nebyl zadán platný rok narození!", "Pozor", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }
            }
            string nadpis = textBoxNadpis.Text;

            nadpis = Obecne.OdstranProblemoveZnaky(nadpis); // Odstraníme znaky z nadpisu, jen ty které by mohly dělat problémy, případně je nahradíme vhodnějšími
            string zprava = textBoxZprava.Text;

            zprava = Obecne.OdstranProblemoveZnaky(zprava); // Odstraníme znaky z textu, jen ty které by mohly dělat problémy, případně je nahradíme vhodnějšími
            int hodiny;
            int minuty;

            if (comboBoxTyp.SelectedIndex != (int)Obecne.UdalostiTypy.narozeniny)  // Pokud nejsou narozeniny, tak se pokusíme získat čas konání
            {
                try
                {
                    hodiny = Convert.ToInt32(textBoxCasHodina.Text); // Pokusíme se získat z textu hodinu konání
                    hodiny = hodiny % 24;                            // Převedeme ji na normální rozmezí
                }
                catch
                {
                    hodiny = 0; // Když se nám převod nezdařil, tak hodin bude nula
                }
                try
                {
                    minuty = Convert.ToInt32(textBoxCasMinuta.Text); // Pokusíme se získat z textu minutu konání
                    minuty = minuty % 60;                            // Převedeme ji na normální rozmezí
                }
                catch
                {
                    minuty = 0; // Když se nám převod nezdařil, tak minut bude nula
                }
            }
            else // Pro narozeniny bude nula minut a nula hodin
            {
                hodiny = 0;
                minuty = 0;
            }
            if (hodiny < 0) // Hodiny nemohou být záp**né, takže budou nejméně nula
            {
                hodiny = 0;
            }
            if (minuty < 0) // Ani minuty nemohou být záp**né, takže budou také nejméně nula
            {
                minuty = 0;
            }
            monthCalendar.SelectionStart = monthCalendar.SelectionStart.AddHours(hodiny);   // Získané hodiny zaznamenáme do kalendáře
            monthCalendar.SelectionStart = monthCalendar.SelectionStart.AddMinutes(minuty); // Získané minuty zaznamenáme do kalendáře
            DateTime upozorneni;

            if (radioButtonVlastni.Checked == true)                                                                                                                // Pokud si chce sám zvolit dobu upozornění
            {
                upozorneni = new DateTime(dateTimePickerUpozorneni.Value.Year, dateTimePickerUpozorneni.Value.Month, dateTimePickerUpozorneni.Value.Day, 0, 0, 0); // Získáme ji z dateTimePickeru
                try
                {
                    hodiny = Convert.ToInt32(textBoxCasHodinaUpozorneni.Text); // Pokusíme se získat z textu hodiny
                    if (hodiny < 0)                                            // Hodiny nesmějí být záp**né, nejméně nulové musejí být
                    {
                        hodiny = 0;
                    }
                    hodiny = hodiny % 24;                                      // Také by mělý být ve správném rozmezí
                    minuty = Convert.ToInt32(textBoxCasMinutaUpozorneni.Text); // Pokusíme se získat z textu minuty
                    if (minuty < 0)                                            // Minuty nesmějí být záp**né, nejméně nulové musejí být
                    {
                        minuty = 0;
                    }
                    minuty = minuty % 60; // Také by měly být ve správném rozmezí
                }
                catch                     // Když se nějaký převod nepovedl, tak hodiny nastavíme na nula, minuty dle upozornění dopředu (ale záp**né, aby se dobře odečítaly od doby konání), upozornění se bude čerpat z doby konání
                {
                    hodiny     = 0;
                    minuty     = Nastaveni.UpozorneniDopredu * -1;
                    upozorneni = new DateTime(monthCalendar.SelectionStart.Year, monthCalendar.SelectionStart.Month, monthCalendar.SelectionStart.Day, monthCalendar.SelectionStart.Hour, monthCalendar.SelectionStart.Minute, monthCalendar.SelectionStart.Second); // Získáme dobu konání
                }
            }
            else // Pokud chceme automatické upozornění
            {
                upozorneni = new DateTime(monthCalendar.SelectionStart.Year, monthCalendar.SelectionStart.Month, monthCalendar.SelectionStart.Day, monthCalendar.SelectionStart.Hour, monthCalendar.SelectionStart.Minute, monthCalendar.SelectionStart.Second); // Získáme dobu konání
                hodiny     = 0;                                // S hodinami nebudeme hýbat
                minuty     = Nastaveni.UpozorneniDopredu * -1; // Minuty budou mít automatickou hodnotu dle Upozornění dopředu a zápornou pro lepší odečítání
            }
            upozorneni = upozorneni.AddHours(hodiny);          // K době upozornění přidáme hodiny
            upozorneni = upozorneni.AddMinutes(minuty);        // K době upozornění přidáme minuty
            if (upozorneni > monthCalendar.SelectionStart)     // Pokud by doba upozornění byla až po události, tak jí nastavíme automaticky před událost
            {
                upozorneni = new DateTime(monthCalendar.SelectionStart.Year, monthCalendar.SelectionStart.Month, monthCalendar.SelectionStart.Day, monthCalendar.SelectionStart.Hour, monthCalendar.SelectionStart.Minute, monthCalendar.SelectionStart.Second);
                upozorneni = upozorneni.AddMinutes(Nastaveni.UpozorneniDopredu * -1);
            }
            string upozornit;

            if (radioButtonVlastni.Checked == true) // Je zvoleno vlastní upozornění?
            {
                if (upozorneni <= DateTime.Now)     // Pokud už to upozornění mělo proběhnout, tak se nastaví jako proběhlé, jinak jako vlastní neproběhlé
                {
                    upozornit = ((int)Obecne.UpozorneniTypy.upozornenoVlastni).ToString();
                }
                else
                {
                    upozornit = ((int)Obecne.UpozorneniTypy.upozornitVlastni).ToString();
                }
            }
            else if (radioButtonAno.Checked == true) // Je zvoleno automatické upozornění?
            {
                if (upozorneni <= DateTime.Now)      // Pokud už to upozornění mělo proběhnout, tak se nastaví jako proběhlé, jinak jako automatické neproběhlé
                {
                    upozornit = ((int)Obecne.UpozorneniTypy.upozornenoAutomaticky).ToString();
                }
                else
                {
                    upozornit = ((int)Obecne.UpozorneniTypy.upozornitAutomaticky).ToString();
                }
            }
            else // Je zvoleno neupozorňovat? Tak se nastaví neupozorňování
            {
                upozornit = ((int)Obecne.UpozorneniTypy.neupozornit).ToString();
            }
            if (upozorneni.Year < dateTimePickerUpozorneni.MinDate.Year) // Pokud by byla událost na hranici zobrazení dateTimePickeru, tak automatické upozornění by mohlo způsobit, že by při úpravě hlásil neplatnost data dateTimePicker, takže datum dostaneme do požadovaného rozmezí
            {
                upozorneni = upozorneni.AddYears(dateTimePickerUpozorneni.MinDate.Year - upozorneni.Year);
            }
            int navratDoRoku = monthCalendar.SelectionStart.Year;                 // Abychom se vrátili zpátky do správného roku, protože třeba u narozenin skočíme na rok 4

            if (comboBoxTyp.SelectedIndex == (int)Obecne.UdalostiTypy.narozeniny) // Pokud ukládáme narozeniny, tak se nastaví rok 4
            {
                monthCalendar.SelectionStart = monthCalendar.SelectionStart.AddYears(4 - monthCalendar.SelectionStart.Year);
            }
            Databaze db = new Databaze();

            for (DateTime i = monthCalendar.SelectionStart; i <= monthCalendar.SelectionEnd; i = i.AddDays(1), upozorneni = upozorneni.AddDays(1)) // Postupně procházíme jednotlivé dny, které byly vybrány a vkládáme je do databáze
            {
                db.Dotaz("INSERT INTO udalosti VALUES ('NULL', '" + comboBoxTyp.SelectedIndex.ToString() + "', '" + nadpis + "', '" + zprava + "', '" + i.ToString("yyyy-MM-dd HH:mm:ss") + "', '0', '" + upozornit + "', '" + upozorneni.ToString("yyyy-MM-dd HH:mm:ss") + "');");
                if (i == monthCalendar.SelectionStart && checkBoxSouvisla.Checked == true) // Jakmile jsme uložili první den, tak se vypne upozorňování pokud to je souvislá událost
                {
                    i         = i.AddHours(-i.Hour);
                    i         = i.AddMinutes(-i.Minute);
                    i         = i.AddSeconds(-i.Second);
                    upozornit = ((int)Obecne.UpozorneniTypy.neupozornit).ToString();
                }
                if (comboBoxTyp.SelectedIndex == (int)Obecne.UdalostiTypy.narozeniny) // Pokud jsou narozeniny, tak tam není dovoleno ukládat víc dní, přece člověk se narodil jen jednou
                {
                    i = monthCalendar.SelectionEnd;
                }
            }
            db.Close();
            monthCalendar.SelectionStart = monthCalendar.SelectionStart.AddYears(navratDoRoku - monthCalendar.SelectionStart.Year); // Vrátíme se zpátky do původního roku
            monthCalendar.SelectionStart = monthCalendar.SelectionStart.AddMinutes(-monthCalendar.SelectionStart.Minute);           // Vynulujeme minuty
            monthCalendar.SelectionStart = monthCalendar.SelectionStart.AddHours(-monthCalendar.SelectionStart.Hour);               // Vynulujeme hodiny
            Obecne.OnZmenaVUdalostech();                                                                                            // Vyvoláme událost změny v událostech, aby se načetli znovu data
            if (comboBoxTyp.SelectedIndex == (int)Obecne.UdalostiTypy.narozeniny)                                                   // Pokud jsme ukládali narozeniny, tak ty v přehledu spadají i do svátků, takže je potřeba vyvolat událost pro změnu svátků
            {
                Obecne.OnZmenaVeSvatcich();
            }
            Obecne.VyplnKalendar(monthCalendar, checkBoxSplnenost.Checked);
            if (Obecne.PametNadpis.Contains(textBoxNadpis.Text) == false) // Zjistíme zda se uložený nadpis nachází v kolekci nadpisů, pokud ne, tak ho tam přidáme
            {
                Obecne.PametNadpis.Add(textBoxNadpis.Text);
            }
            buttonReset.PerformClick(); // Vše vyresetujeme pomocí tlačítka reset
        }