Panel kontrolünü resim olarak yazdırma

Up uzuunn süreden sonra merhaba… Windows form da panel kontrolü yazıcıdan yazdırmak için kontrolün görüntüsünü resim olarak kayıt edip, kayıt edilen o resmi yazdırabiliriz. Diğer VS kontrollerini bu şekilde yazdıra bilirmiyiz ? sorusunu soracak olursanız cevabım evet.

Örnek de panel kontrolünü kullanmamın sebebi; runtime da veya çalıştırmadan önce panel kontrolü içine eklediğimiz zamazingoları direk yazdırabilmek için kullandım. Mesela reçete programında panel içine yazdırılan ürünleri yazıcıdan çıktı almak için döngülerle dönecek yerine resim olarak alıp yazıcıdan basit bir şekilde yazdırabiliriz.

panel-resim-yazdirma

Sözü(yazıyı) fazla uzatmadan örneğe geçecek olursak. Resimdeki gibi forma; panel, button ve panel içine yazdırılması için bir kaç tane label sallayın. Buton clik olayına gelerek aşağıdaki kodları yapıştırın. Gerekli açıklamalar kodlar içinde verilmiştir.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
 private void btnYazdir_Click(object sender, EventArgs e)
        {
            int genislik = panel1.Size.Width;
            int yukseklik = panel1.Size.Height;

            using (Bitmap bmp = new Bitmap(genislik, yukseklik))
            {
                panel1.DrawToBitmap(bmp, new Rectangle(0, 0, genislik, yukseklik));
                bmp.Save("resim.png", ImageFormat.Png);
            }

            // buraya kadar olan kısımda Panel'in resmini oluşturuyoruz.

            PrintDocument prt = new PrintDocument();
            prt.PrintPage += new PrintPageEventHandler(resmiYazdir);
            prt.Print();

            // Oluşturduğumuz resmi burada aşağıdaki metod yardımı ile yazdırıyoruz.
           

        }

        void resmiYazdir(object o, PrintPageEventArgs e)
        {
            System.Drawing.Image i = System.Drawing.Image.FromFile("resim.png");
            Point p = new Point(0, 0);
            e.Graphics.DrawImage(i, p);

           
        }

Windows formda panel kontrol ortalama

Windows formda eklediğimiz kontrolü formun alanına göre yanlardan ve üstlerden ortalamak isteyebiliriz. Örnek olarak panel kontrolünü formda ortalamak istersek;

panel-ortalama

Boş bir windows forma panel kontrolü eklyerek formun load kısmına aşağıdaki kodları yazalım;

1
2
3
4
5
6
7
8
9
 private void Form1_Load(object sender, EventArgs e)
        {
            this.WindowState = FormWindowState.Maximized;

            float x = (Convert.ToInt32(this.Width) - Convert.ToInt32(panel1.Width)) / 2;
            float y = (Convert.ToInt32(this.Height) - Convert.ToInt32(panel1.Height)) / 2;

            panel1.Location = new Point(x: Convert.ToInt32(x), y: Convert.ToInt32(y));
        }

Formu tam ekran başlatmak için WindowState özelliğini kullandık. Ardından panelin yeniden konuşlanması için formun genişğinden panelin genişliğini çıkarıp 2 ye böldük böylece sağ ve soldan ortalı bir şekilde konumlandırdık. Aynı şekilde üsten ve alttan ortalamak içinde.

Veritabanı yardımıyla picturebox da resim göstermek

Bu yazımda veritabanı, combobox, picturebox kontrollerini bir arada kullanarak basit bir uygulama yapalım. İlk olarak veritabanın da tblResim adında bir tablo oluşturalım. Tabloda id(int), resim için isim alanı(ad nvarchar(50)) ve resim uzantı adı(resimAdi nvarchar(50)) için kolonları oluşturmanız yeterli. Veritabanı kısımını bitirdikten sonra arayüz tarafına geçebiliriz.

Arayüz tarafına geçmeden önce örneğimizde hangi konularda pratik yapacağımızı yazayım;

Veritabanı ile resim ilişkisi
Seçili dosyayı farklı bir konuma kopyalama
Veritabanına resim adı ile kayıt yapmak
Veritabanından çekilen bilgilerle combobox doldurma
openFileDialog kontrolü ile resim dosyası işlemleri
Veritabanı aracılığı ile formda resim gösterme

Senaryomuz şu şekilde; ilk olarak formu doldurup(sadece bir isim girip) herhangi bir yerden o isim için resim seçip yükledikten sonra formu kayıt ediyoruz. Bu kayıt esnasında resim programın çalıştığı dizine seçtiğimiz resmin kopyasını kopyalayarak veritabanına sadece resmin uzantılı adını kayıt etmiş oluyoruz. Kayıt işleminden sonra sağ tarafta kalan comboboz yardımı ile kayıtlı resim isimlerini çekip, combobox seçili olan isime veritabanından karşılık gelen resimi program dizinine kopyaladığımız yerden gösteriyoruz.

combobox-picturebox

Senarya az çok oturduysa resimdeki gibi bir form ekranı tasarlayıp kod tarafına geçebiliriz. Kod içinde gerekli açıklamalar mevcuttur.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
        private void Form1_Load(object sender, EventArgs e)
        {
            comboboxDoldur();
        }

        private void comboboxDoldur()
        {
            SqlCommand cmdDoldur = new SqlCommand("Select adi from tblResim", sql);
            sql.Open();
            SqlDataReader rdr = cmdDoldur.ExecuteReader();

            while (rdr.Read())
            {
                comboBox1.Items.Add(rdr["adi"]);
            }
            sql.Close();
        }

       

        private void btnKaydet_Click(object sender, EventArgs e)
        {
            SqlCommand cmd = new SqlCommand();
            cmd.Connection = sql;
            cmd.CommandType = System.Data.CommandType.Text;
            cmd.CommandText = "insert into tblResim (adi,resimAdi) values (@ad, @resim)";
            cmd.Parameters.AddWithValue("@ad", textBox1.Text);
            cmd.Parameters.AddWithValue("@resim", resimuzantiliadi);


            sql.Open();

            int etkilenen = cmd.ExecuteNonQuery();

            sql.Close();

            if (etkilenen > 0)
            {
                MessageBox.Show("Kayıt edildi...");
                comboboxDoldur();
            }
            else
            {
                MessageBox.Show("Kayıt edilmedi !!!");
            }
        }
        SqlConnection sql = new SqlConnection("server=.; database=coder; trusted_connection=true;");
        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
           
            SqlCommand cmd = new SqlCommand("Select resimAdi from tblResim where adi='" + comboBox1.SelectedItem + "'", sql);
            sql.Open();
            SqlDataReader rdr = cmd.ExecuteReader();
           
            while (rdr.Read())
            {
                pictureBox1.Image = Image.FromFile("" + rdr["resimAdi"].ToString());

                pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;
            }
            sql.Close();

        }
        string dosyaYolu;
        string resimuzantiliadi;
        private void btnYukle_Click(object sender, EventArgs e)
        {
            openFileDialog1.ShowDialog();
            resimuzantiliadi = openFileDialog1.SafeFileName;
            dosyaYolu = Path.GetFileName(openFileDialog1.FileName);

            lblResimAdi.Text = dosyaYolu;

            if (File.Exists("" + dosyaYolu)) // "" tırnak yapılmasının nedeni kopyalanacak dosyayı program exe dosyasının bulunduğu konumda dosyanın var olup olmadığını kontrol etmek için.
            {
                MessageBox.Show("Dosya zaten mevcut");
            }
            else
            {
                File.Copy(openFileDialog1.FileName, "" + dosyaYolu); // "" tırnak yapılmasının nedeni kopyalanacak dosyayı program exe dosyasının bulunduğu konuma kopyalamak için.  

                MessageBox.Show("Dosya kopyalandı");

            }    
        }

Android oyun geliştiriciler için e-kitap

Android ile ilgilenen arkadaşlar için blog.aligoren.net kaynaklı toplanmış birkaç tane oyun geliştiricileri için e-kitap. Dil her ne kadar yabancı olsa da(ingilizce) kodları referans alınabilir. Android yazan arkadaşların takım çantaların da bulundurabileceği android e-kitaplar;

android_oyun_gelistirme

Buradan indir ; http://yadi.sk/d/ZvQlZyMeAUb53

Kaynak ; http://blog.aligoren.net/2013/10/android-oyun-gelistirme-e-kitap-indir.html

Combobox listview ilişkisi

Windows formda Combobox kontrolü ve akabinde listviewe seçilene göre veritabanından çekilen veriyi göstermek istemişizdir. Basit bir combobox listview ilişkisi olan bir uygulama ile konuyu öğrenelim.

Öncelikle verileri veritabanından çekeceğimiz için combobox listview ilişkisinin ortamını uygun tablolarla ayarlayalım. Senaryomuz gereği iki tablo oluşturalım. İlk tablo kişiler tablosu olsun. İçeriği; adi, soyadi, takimi(tipi int). Diğer tablo combobox da gözükecek olan takımlar tablosu olsun. İçeriği; id, takimadı(nvarchar tipli) oluşturup. Kişiler tablosundaki takimi kolonu ile Takımlar tablosundaki id yiz resimdeki gibi ilişkilendirin. İlişkilendirme yaptıktan sonra takımları girin ve kişilerle birlikte takım numaralarını resimdeki gibi girin.

iliskilendirme

kisiler-takimlar-tablosu

Veritabanı tarafını bitirdikten sonra form kısmına geçebiliriz. Forma resimdeki gibi combobox ve listview ekleyip form load olayına veritabanından takımlar tabolsundaki takım isimlerini combobox kontrolüne çekelim;

listview-combobox-kontrolu

1
2
3
4
5
6
7
8
9
10
11
12
13
14
  SqlConnection sql = new SqlConnection("server=.; database=coder; trusted_connection=true;");
        private void Form1_Load(object sender, EventArgs e)
        {
           
            SqlCommand cmd = new SqlCommand("Select takimAdi from tblTakimlar", sql);
            sql.Open();
            SqlDataReader rdr = cmd.ExecuteReader();

            while (rdr.Read())
            {
                comboBox1.Items.Add(rdr[0]);
            }
            sql.Close();
        }

Seçilen takımdaki kişileri gösterebilmek için listview kontrolüne veritabanından iki tabloyu sql join komut ile birleştirerek ilgili kategori detayını kontrolde göstermek için combobox SelectedIndexChanged olayına aşağıdaki kodları yazalım;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            listView1.Items.Clear();

            SqlCommand doldur = new SqlCommand("select  adi, soyadi, takimAdi from tblKisiler td join tblTakimlar tk on td.takimi=tk.id where takimi='" + (comboBox1.SelectedIndex + 1).ToString() + "'", sql);
            sql.Open();
            SqlDataReader rdr = doldur.ExecuteReader();
            while (rdr.Read())
            {
                ListViewItem li = new ListViewItem();
                li.Text = rdr["adi"].ToString();
               
                li.SubItems.Add(rdr["soyadi"].ToString());
                li.SubItems.Add(rdr["takimAdi"].ToString());


                listView1.Items.Add(li);
            }

            sql.Close();
        }

ComboBox a veri tabanından veri gösterme

Combobox kontrolüne veritabanındaki tablodan kayıtları gösterebilmek için Ado.net ile işlemi 3 satırlık kod yardımıyla yapabiliriz. Şöyle ki ;

1
2
3
4
5
6
7
8
9
10
11
12
SqlConnection sql = new SqlConnection("server=.; database=veritabaniadi; trusted_connection=true;");
comboBox1.Items.Clear();

SqlCommand cmd = new SqlCommand("Select kolonadi FROM tabloadi", sql);
sql.Open();
SqlDataReader rdr = cmd.ExecuteReader();

while (rdr.Read())
{
  comboBox1.Items.Add(rdr[0]);
}
sql.Close();

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.

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
  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;
            }
        }

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
 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());
            }
        }

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

1
2
3
4
private void tabControl1_Click(object sender, EventArgs e)
        {
            listele();
        }

listele() metodu;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
 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);
            }
        }

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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();
                }

            }
        }

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

1
2
3
4
5
6
7
8
9
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;
            }
        }

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
 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());
            }

        }

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 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());
            }

        }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
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;
            }
        }

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 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());
            }
        }