/// <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); } }
/// <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; }
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()); } }
/// <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 }
/// <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(); }
/// <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 }