Günlük kullanım için mini not uygulaması

Desktop üzerinde çalışan gün içerisinde kullanılabilecek mini not uygulaması ile merhaba. Bu örnek de geliştirme tarafında amaç, Xml, timer, datetime vb. nesne ve yapılarını bir arada kullanmak.

xml-timer-datetime

Örnek de yazılan not gün içindeki zamanı belirlenerek kayıt ediliyor. Kayıtlar Xml dosyasında tutulup liste olarak kullanıcıya tab sekmesi altında gösterilebiliyor. Timer kontrolü ile her bir saniye de Xml deki verilerin zamanı kontrol ediliyor. Zamanı gelen not ayrı bir formda kullanıcıya sağ alt köşede açılıyor. Not eğer yapılacak iş ise, işi sonraya ertelemek isterse bunun için ekstra dakika ekletip notu erteleyebiliyor.

Wajanda ismini verdiğim bu not uygulamasını kodları ile birlikte aşağıdan indirebilirsiniz.

[wpdm_file id=17]Resimdeki gibi bir form ekranı tasarlayıp, forma timer nesnesi ekledikten sonra kaydet botunana aşağıdaki kodları yazalım.

[cc lang=’csharp’ ] private void btnKaydet_Click(object sender, EventArgs e)
{
try
{
bool varmi = false;
int enBuyukId;

XmlDocument doc = new XmlDocument(); // Xml dosyamızı okumak için XmlDocument sınıfından yararlanıyoruz.
doc.Load(“wajanda.xml”);
XmlElement root = doc.DocumentElement;
XmlNodeList kayitlar = root.SelectNodes(“/Baslangic/Notlar”); // Xml içindeki istediğimiz kayıtlara ulaşabilmek için yolu tanımlıyoruz. Bunu veritabanı içindeki
// tablo olarak düşünebilirsiniz. Bu yol ile Kullanicilar tablosuna yani listesine ulaşıp kayıtları XmlNodeList sınıfından oluşturduğumuz kayitlar isimli

if (kayitlar.Count > 0) // Her yeni kayıta otomatik farklı id numarası verebilmek için bir önceki kayıtın id numarasına göre işlem yapmamız gerekecek. Burada ilk kayıt varmı kontrol ediyoruz. Varsa, kayıtlar içinde en büyük idyi yani numarayı bulup üzerine 1 ekletip yeni kayıt için hazırlıyoruz. Yoksa, daha önce kayıt oluşturulmamışsa ilk kayıt numarasını 0 atayıp kayıt için gönderiyoruz.
{
varmi = true;
}

if (varmi == true)
{
int[] kayittakiSayilar = new int[kayitlar.Count]; // Kayıt sayısı kadar dizi tanımaldık.

int i = 0; // Diziyi arttırmak için sayı tanımladık.
foreach (XmlNode secilen in kayitlar)
{
kayittakiSayilar[i] = Convert.ToInt32(secilen[“id”].InnerText); // Kayıtlardaki tüm id yani numaraları kayittakiSayilar dizisi içine ekledik.
i = i + 1;
}

Array.Sort(kayittakiSayilar); // kayittakiSayilar dizisi içinde bulunan sayılardan en büyüğünü bulabilmek için Array sınıfını kullandık. Bulunan en büyük sayıya 1 ekledik.
enBuyukId = kayittakiSayilar[kayittakiSayilar.Length – 1];
enBuyukId = enBuyukId + 1;

}
else
{
enBuyukId = 0;
}

if (File.Exists(“wajanda.xml”)) // Xml dosyamıza kayıt eklemede hata almamak için dosyanın var olup olmadığını kontrol ediyoruz.
{

XmlElement UserElement = doc.CreateElement(“Notlar”); // Veritabanından tablo ismi gibi düşünbebilirsiniz.

XmlElement id = doc.CreateElement(“id”); //Oluşturulan xml içindeki Kullanicilar elementine id isimli element (DB deki gibi düşünürsek Kullanicilar tablosuna id kolonunu ekliyoruz.)
id.InnerText = enBuyukId.ToString();
UserElement.AppendChild(id);

XmlElement baslik = doc.CreateElement(“baslik”);
baslik.InnerText = txtBaslik.Text;
UserElement.AppendChild(baslik);

XmlElement detay = doc.CreateElement(“detay”);
detay.InnerText = txtKonu.Text;
UserElement.AppendChild(detay);

XmlElement zaman = doc.CreateElement(“zaman”);
zaman.InnerText = (Convert.ToDateTime(cbSaat.Text + “:” + cbDakika.Text + “:” + “00”)).ToString();
UserElement.AppendChild(zaman);

XmlElement durum = doc.CreateElement(“durum”);
durum.InnerText = “1”;
UserElement.AppendChild(durum);

doc.DocumentElement.AppendChild(UserElement);

XmlTextWriter xmleekle = new XmlTextWriter(“wajanda.xml”, null);
xmleekle.Formatting = Formatting.Indented;
doc.WriteContentTo(xmleekle);
xmleekle.Close();

txtBaslik.Text = “”;
txtKonu.Text = “”;
cbSaat.Text = DateTime.Now.ToLongTimeString().Substring(0, 2);
cbDakika.Text = DateTime.Now.ToLongTimeString().Substring(3, 2);

lblMesaj.Text = “Kayıt eklendi.”; // Kayıt işlemi başarılı bir şekilde bittikten sonra mesaj için label kullanabilirsiniz.

}

}
catch (Exception)
{

throw;
}
}[/cc]

Form load kısmına Xml dosyasını programın çalıştığı dizine ekliyoruz.

[cc lang=’csharp’ ] private void Form1_Load(object sender, EventArgs e)
{
var X = Screen.GetWorkingArea(this).Width;
var Y = Screen.GetWorkingArea(this).Height;
this.Location = new Point(X – this.Width, Y – this.Height);

cbSaat.Text = DateTime.Now.ToLongTimeString().Substring(0, 2);
cbDakika.Text = DateTime.Now.ToLongTimeString().Substring(3, 2);

try
{
if (!File.Exists(“wajanda.xml”)) // Daha önceden dosyanın var olduğunu kontrol ettik. Dosya yoksa .xml uzantılı xmldosyam adında dosya oluşturma işlemine başladık.
{
XmlTextWriter xmlolustur = new XmlTextWriter(“wajanda.xml”, null); // XmlTextWriter sınıfından oluşturacağımız dosya özellikleri için nesne oluşturduk.

xmlolustur.WriteStartDocument();

xmlolustur.WriteComment(“Oluşturulan xml hakkında bilgi”); // Dosya hakkında bilgi ekledik.

xmlolustur.WriteStartElement(“Baslangic”); // Başlangıç elementi gibi özellikleri ekledik.

xmlolustur.WriteEndDocument();

xmlolustur.Close();
}
else
{

}
}
catch (Exception ex)
{

MessageBox.Show(ex.ToString());
}
}
[/cc]

Form içindeki tab kontrolünde dolaşırken, Xml kayıtlı olan verileri listelemek için listele() metodunu çağıralım.

[cc lang=’csharp’ ]private void tabControl1_Click(object sender, EventArgs e)
{
listele();
}[/cc]

listele() metodu;

[cc lang=’csharp’ ] private void listele()
{
listView1.Items.Clear();
XmlDocument doc = new XmlDocument();

doc.Load(“wajanda.xml”);
XmlElement root = doc.DocumentElement;
XmlNodeList kayitlar = root.SelectNodes(“/Baslangic/Notlar”);

foreach (XmlNode secilen in kayitlar)
{
ListViewItem lv = new ListViewItem();
lv.Text = secilen[“id”].InnerText;
lv.SubItems.Add(secilen[“baslik”].InnerText);
lv.SubItems.Add(secilen[“zaman”].InnerText);
if (secilen[“durum”].InnerText == “1”)
{
lv.SubItems.Add(“Aktif”);
}
else
{
lv.SubItems.Add(“Pasif”);
}

listView1.Items.Add(lv);
}
}[/cc]

Timer kontrolü her saniyede bir xml deki veriler içinde kayıt zamanını şimdiki zaman ile kontrol ediyor;

[cc lang=’csharp’ ]private void timer1_Tick(object sender, EventArgs e)
{
XmlDocument doc = new XmlDocument();

doc.Load(“wajanda.xml”);
XmlElement root = doc.DocumentElement;
XmlNodeList kayitlar = root.SelectNodes(“/Baslangic/Notlar”);

foreach (XmlNode secilen in kayitlar)
{

if ((DateTime.Now.ToShortDateString() + ” ” + DateTime.Now.ToLongTimeString()) == secilen[“zaman”].InnerText && secilen[“durum”].InnerText == “1”)
{
globalsinifim.id = secilen[“id”].InnerText;
globalsinifim.zaman = secilen[“zaman”].InnerText;
this.Show();
Form2 frm = new Form2();
frm.Show();
}

}
}[/cc]

Listview de seçileni göstermek için;

[cc lang=’csharp’ ]string secilen=null;
private void listView1_SelectedIndexChanged(object sender, EventArgs e)
{
if (listView1.SelectedItems.Count > 0)
{
ListViewItem li = listView1.SelectedItems[0];
secilen = li.SubItems[0].Text;
}
}[/cc]

Seçileni temizlemek için temizle butonuna yazılacak kodlar;

[cc lang=’csharp’ ] private void btnTemizle_Click_1(object sender, EventArgs e)
{
try
{
XDocument xDoc = XDocument.Load(“wajanda.xml”);
XElement deletedElement;
if (secilen !=null)
{
deletedElement = xDoc.Root.Elements().FirstOrDefault(xe => xe.Element(“id”).Value == secilen);
secilen = null;
}
else
{
deletedElement = xDoc.Root.Elements().FirstOrDefault(xe => xe.Element(“durum”).Value == “0”);
}

deletedElement.Remove();

xDoc.Save(“wajanda.xml”);
listele();

}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}

}[/cc]

İkin formda yani notun gösterileceği formda ertele butonuna yazılacak olan kodlar;

[cc lang=’csharp’ ] private void btnErtele_Click(object sender, EventArgs e)
{
try
{
DateTime gelenZaman = Convert.ToDateTime(globalsinifim.zaman);

DateTime ertelenmis = gelenZaman.AddMinutes(Convert.ToInt32(cbDakika.Text));

XDocument xDoc = XDocument.Load(“wajanda.xml”);
XElement currentElement = xDoc.Root.Elements().FirstOrDefault(xe => xe.Element(“id”).Value == globalsinifim.id);
currentElement.SetElementValue(“zaman”, ertelenmis.ToString());
xDoc.Save(“wajanda.xml”);

this.Close();
}
catch (Exception ex)
{

MessageBox.Show(ex.ToString());
}

}[/cc]

[cc lang=’csharp’ ]private void Form2_Load(object sender, EventArgs e)
{
try
{
var X = Screen.GetWorkingArea(this).Width;
var Y = Screen.GetWorkingArea(this).Height;
this.Location = new Point(X – this.Width, Y – this.Height);

XmlDocument doc = new XmlDocument();

doc.Load(“wajanda.xml”);
XmlElement root = doc.DocumentElement;
XmlNodeList kayitlar = root.SelectNodes(“/Baslangic/Notlar”);

foreach (XmlNode secilen in kayitlar)
{
if (secilen[“id”].InnerText == globalsinifim.id)
{

lblBaslik.Text = secilen[“baslik”].InnerText;
txtKonu.Text = secilen[“detay”].InnerText;
}
}
}
catch (Exception)
{

throw;
}
}
[/cc]

Kapat butonu ile okunan notu xml dosyasından silmek için;

[cc lang=’csharp’ ] private void btnKapat_Click(object sender, EventArgs e)
{
try
{
XDocument xDoc = XDocument.Load(“wajanda.xml”);
XElement currentElement = xDoc.Root.Elements().FirstOrDefault(xe => xe.Element(“id”).Value == globalsinifim.id);
currentElement.SetElementValue(“durum”, “0”);
xDoc.Save(“wajanda.xml”);

this.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}[/cc]

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir