Windows form da pdf dosya yazdırmak


Deprecated: Function create_function() is deprecated in /var/www/vhosts/digitaldunyam.net/coder.digitaldunyam.net/wp-content/plugins/codecolorer/lib/geshi.php on line 4698

Masaüstü windows form projelerinde raporlama vb. durumlarda form üzerinden çıktı dosya almak istemişizdir. Bu örneğimizde basit bir windows from dan PDF(Portable Document Format) dosyasına veri aktarımını yani yazdırma işlemini gerçekleştireceğiz.

[wpdm_file id=12]

Pdf bildiğiniz gibi her platformda çalışan ve ücretsiz görüntülenebildiği için excel vb. tarzı dosyalara göre daha fazla rağbet görmekte. Konuyu fazla uzatmadan basit bir form ekranı hazırlayıp windows formdan pdf e yazdırma işlemini yapalım.

csharp-to-pdf

Resimdeki gibi bir form ekranı oluşturun. Buradaki amaç textboxa girilen değerler doğrultusunda önceden belirlediğiniz dizine pdf dosyasını oluşturmak. Bir adet multiline değeri true olan textbox ve buton forma ekledikten sonra aktarım için gerekli olan itextsharp.dll dosyasını projeye referans olarak ekleyin.(Dosyayı indireceğiniz proje içinde bulabilirsiniz)

Formu ve kütüphaneyi projeye ekledikten sonra buton click olayına aşağıdaki kodları yazabiliriz;

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
using iTextSharp.text;
using iTextSharp.text.pdf;
using System.IO;

// Eklemeyi unutmayın !

 private void btnYazdir_Click(object sender, EventArgs e)
        {
            try
            {

                iTextSharp.text.Document pdfDosyam = new iTextSharp.text.Document();
                PdfWriter.GetInstance(pdfDosyam, new FileStream("C:\\digitaldunyam\\coder.pdf", FileMode.Create));

                pdfDosyam.AddCreator("Oluşturucu adını buaraya girebilirsiniz");

                if (pdfDosyam.IsOpen() == false)
                {

                    pdfDosyam.Open();
                }
                pdfDosyam.Add(new Paragraph(txtIcerik.Text));

                pdfDosyam.Close();
                MessageBox.Show("Pdf dosyası oluşturuldu.");

            }
            catch (Exception)
            {

                MessageBox.Show("Hata ! Oluşturulmadı...");
            }
        }

Not: Pdf’i oluşturmak için  C dizine daha önceden digitaldunyam isimli klasör eklemeniz gerekir.

Windows formdan smtp ile mail gönderme

Windows form uygulamasında internet aracılığı ile bir yerlere veya kullanıcıya mail göndermek istemişizdir. Bu ihtiyaca karşılamak için mini bir smtp ile mail gönderme uygulaması hazırladım.

windowsformsmtpgonderimi

Resimdeki gibi bir form ekranı hazırlayıp kod tarafına buton clik olayından geçebiliriz. Geçemeden önce örnek uygulama google gmail smtp ayarları ile yapıldığını hatırlatayım. Kendi gmail adresiniz ve şifrenizi girerek smtp mail gönderim testini yapabilirsiniz.

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
private void btnGonder_Click(object sender, EventArgs e)
        {
            //using System.Net.Mail; 
            try
            {
                MailMessage mail = new MailMessage();
                SmtpClient SmtpServer = new SmtpClient("smtp.gmail.com");
                mail.From = new MailAddress("postaadresin@gmail.com"); // gmail adresiniz

                mail.To.Add(txtGonderilecekAdres.Text);
                mail.Subject = txtBaslik.Text;
                mail.Body = txtKonu.Text;

                SmtpServer.Port = 587; // gmail port numarası 587 olduğu için bu port numarasını kullandık
                SmtpServer.Credentials = new System.Net.NetworkCredential("postaadresin@gmail.com", "sifresi"); // gmail adresiniz ve şifresini buraya girin
                SmtpServer.EnableSsl = true;

                SmtpServer.Send(mail);
                MessageBox.Show("Mail gönderildi");
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
        }

Gerekli açıklamalar kodlar içinde mevcut. SmtpClient, SmtpServer sınıflarını kullanarak yapılmış örnek uygulama.
[wpdm_file id=16]

Windows formda geri sayım sayacı

Windows formda timer kullanımına örnek olarak basit bir geri sayım sayacı örneği ile merhaba. Basit bir geri sayım sayacı bazen kafaları karıştırmıştır. Bu gibi durumlar için basit bir örnek ile sayım aracını göstermek istedim.

geri-sayim-araci

Resimdeki gibi biraz afilli bir forma timer, textbox, buton ve label kontrolleri ekleyerek başlayabiliriz. Zamanı kısıtlı arkadaşlar örneği aşağıdaki bağlantıdan indirebilir…

Form tasarımından sonra kod tarafına geçebiliriz. İlk olarak sayacı başlatacak olan buton kontrolü clik olayına aşağıdaki kodları yazıyoruz. Burada yapılan global olarak tanımlanan sayı değişkenine kullanıcıdan textbox aracılığı ile alınan sayıyı atadıktan sonra timer kontrolünü bir saniyede bir çalışacak şekilde aktif ediyoruz.

1
2
3
4
5
6
7
 int sayi;
        private void btnBasla_Click(object sender, EventArgs e)
        {
            sayi = Convert.ToInt32(textBox1.Text);
            timer1.Enabled = true; // Timer aktif ediyoruz
            timer1.Interval = 1000; // Saniyede bir çalışması için interval değerini 1000 yapıyoruz
        }

Aktif edilen timer içindeki kodu her bir saniyede bir çalıştıracağı için gelen sayıyı birer azaltıp label kontrolü yardımı ile azalan sayıyı gösteriyoruz. Ve sıfır olunca timer kontrolünü durduruyoruz.

1
2
3
4
5
6
7
8
9
 private void timer1_Tick(object sender, EventArgs e)
        {
            sayi--; //timer her saniyede sayıyı 1 azaltacak
            lblSayi.Text = sayi.ToString();
            if (sayi == 0)
            {
                timer1.Enabled = false;
            }
        }

[wpdm_file id=15]

Database bağlı formda arama yapmak

Veritabanına bağlı windows form uygulamasında form içinde database deki verileri arama yaparak listview veya başka bir kontrolde göstermek için yapmamız gereken standart olarak yaptığımız ado.net olayında sqlcommand satırındaki sorguya ek parametre ekleyerek sorguyu gerçekleştirmek.

veritabani-form-arama

Form ekranına resimdeki gibi textbox buton ve gelecek olan verileri gösterebilmek için listview kontrolü sürükleyip yerleştirin. Örnek içinde iki şekilde arama yapabilirsiniz. Biri Google daki gibi arama yaparken harfleri girdikçe çıkacak olan sonuçları anında gösteren(bu büyük veri için aramanızda performans kaybı yaşanacaktır), diğeri ise aratılacak olan kelimeyi girdikten sonra buton ile arama işlemini yaptırmak.

[wpdm_file id=14]

Buton ile aratma yapmak için buton clik olayına yazılacak kod;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
SqlConnection sql = new SqlConnection("server=.; database=coder; trusted_connection=true;");

        private void btnAra_Click(object sender, EventArgs e)
        {
            lvListe.Items.Clear();
            SqlCommand doldur = new SqlCommand("select * from tblDeneme where ad like '%" + txtKelime.Text + "%'", sql);
            sql.Open();
            SqlDataReader rdr = doldur.ExecuteReader();
            while (rdr.Read())
            {
                ListViewItem li = new ListViewItem();
                li.Text = rdr["ad"].ToString();
                li.SubItems.Add(rdr["soyad"].ToString());
                lvListe.Items.Add(li);
            }

            sql.Close();
        }

Textbox’un TextChanged olayına yazılacak kod;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 private void txtKelime_TextChanged(object sender, EventArgs e)
        {
            lvListe.Items.Clear();
            SqlCommand doldur = new SqlCommand("select * from tblDeneme where ad like '%" + txtKelime.Text + "%'", sql);
            sql.Open();
            SqlDataReader rdr = doldur.ExecuteReader();
            while (rdr.Read())
            {
                ListViewItem li = new ListViewItem();
                li.Text = rdr["ad"].ToString();
                li.SubItems.Add(rdr["soyad"].ToString());
                lvListe.Items.Add(li);
            }

            sql.Close();
        }

Windows form sql server bağlantısı

C# veya VB.net ile yapılan Windows form uygulamasında oluşturduğunuz veya oluşturulan sql veritabanına(mssql) bağlantı kurup verileri işleyebilmek için ADO.NET teknolojisinden faydalanmaktadır. Ado.net ile windows uygulamasını veya web(asp.net) uygulamasını birbirine bağlayıp veri transferi ve okuması yaptırabiliyorsunuz.

Peki bu bağlantı nasıl yapılıyor soracak olursanız; En basitinden local(kendi bilgisayarınızda) yaptığınız windows form uygulamasını sql server daki oluşturduğunuz veri tabanı ile bağlantı kurabilmek için SqlConnection den faydalanılır.

Kendi bilgisayarımda coder isimli veritabanıma bağlantı için form load veya başka bir yerde yazdığım kod satırı;

1
SqlConnection sql = new SqlConnection("server=.; database=coder; trusted_connection=true;");

Bu şekilde bağlantı yolunu tanımlıyoruz. Bundan sonra yapacağımız işlemler için bu bağlantıdaki örnek uygulamaları inceleyebilirsiniz;

http://coder.digitaldunyam.net/ado-net/

Zamanlı bilgisayar işlem programı

Her junior yazılımcının karşılaşacağı ödev babında program ile merhaba. BEnzer konu her ne kadar paylaşılmışsa da alternatif olarak paylaşmak istedim.

otomatik-bilsiyara-kapatma-programi

Aşağıdaki bağlantıdan indirebileceğiniz zamanlı bilgisayar işlem programı ile bilgisayarı belirlediğiniz zaman kapatıp veya yeniden başlatabilirsiniz. Yada resimdeki gibi bir form ekranı tasarlayarak alttaki kodlar yardımı ile yapabilirsiniz.

[wpdm_file id=11]

Form tasarlarken kullandığım kontroller; birkaç label, buton, maskedtextbox(zamanı saat ve dakika formatın da girebilmek için), datetimepicker, radiobuton, timer ve notifyicon. Yaptığım işlemleri kod tarafına geçmeden adım adım anlatırsam konuyu daha verimli aktaracağımı düşünüyorum;

  • Anlık zamanı gösterebilmek için timer kontrolünün tick olayına bir label a anlık saati gösterdik. Timer ın Interval değerini 1000 yaparak saniyede bir anlık saati label da otomatik gösterdik.
  • Zamanlayıcı çalıştırmak için ilgili buton yardımı ile maskedtextbox ve datetimepicker seçilen değeri metod yardımı ile datetime tipli değişkene atadık. Zamanlayıcı çalıştırmak için eklenen timer ı aktif ettik.
  • Aktif edilen zamanlayıcı timer ı her saniyede bir şimdiki zaman(saat) ile ayarlanan saati karşılaştırdık.
  • Ayarlanan zaman ile şimdiki zaman eşit ise radiobuton da seçilen işlemi yapmasını istedik.
  • NotifyIcon kontrolü ile programı yani formu gizlediğimiz de sağ alt köşede mesaj iletisi vermesi için ayarladık.
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
 private void tmrSimdikiZaman_Tick(object sender, EventArgs e)
        {
            lblSimdikiSaat.Text = DateTime.Now.ToLongTimeString();
        }
       
        DateTime alarmZamani;
        DateTime ayarZamani;
        private void btnKur_Click(object sender, EventArgs e)
        {
            if (txtSaat.Text == "")
            {
                MessageBox.Show("Girilen değerleri kontrol et \n Alanlardan herhangi birini boş bırakma !");
                return;
            }
            else
            {

                alarmayar(dateTimePicker1.Value.Date);
            }
        }

        private void alarmayar(DateTime zaman)
        {

            alarmZamani = zaman;
            alarmZamani = alarmZamani.AddHours(Convert.ToInt32(txtSaat.Text.Substring(0, 2)));
            alarmZamani = alarmZamani.AddMinutes(Convert.ToInt32(txtSaat.Text.Substring(3, 2)));


            if (DateTime.Now >= alarmZamani)
            {
                MessageBox.Show("Geçmiş zamana alarm kuramazsınız !!!");
                return;
            }
            else
            {

                tmrAlarmZamani.Enabled = true;
                btnKur.Enabled = false;
                if (rbKapat.Checked == true)
                {
                    lblMesaj.Text = "Bilgisayar " + txtSaat.Text +  " zamanına kapatılması için ayarlandı.";
                }
                else if (rbYeniden.Checked == true)
                {
                     lblMesaj.Text = "Bilgisayar " + txtSaat.Text + " zamanına yeniden başlatılması için ayarlandı.";
                }
                else
                {
                    lblMesaj.Text = txtSaat.Text +  " için herhangi bir görev ayarlanmamış";
                }
            }
        }

        private void tmrAlarmZamani_Tick(object sender, EventArgs e)
        {
            ayarZamani = DateTime.Now;

            if (ayarZamani.ToString() == alarmZamani.ToString())
            {
                tmrAlarmZamani.Enabled = false;

                if (rbKapat.Checked)
                {
                    notifyIcon1.BalloonTipText = "Bilgisayarınız kapatılıyor...";
                    notifyIcon1.ShowBalloonTip(3);
                    System.Diagnostics.Process.Start("shutdown", "-s -f -t 0");
                }
                else if (rbYeniden.Checked)
                {
                    notifyIcon1.BalloonTipText = "Bilgisayarınız yeniden başlatılıyor...";
                    notifyIcon1.ShowBalloonTip(3);
                    System.Diagnostics.Process.Start("shutdown", "-r -f -t 0");
                }
                else
                {
                    lblMesaj.Text = "Zaman Geldi";
                    notifyIcon1.BalloonTipText = "Zaman Geldi";
                    notifyIcon1.ShowBalloonTip(5);
                }

            }
        }

        private void btnIptal_Click(object sender, EventArgs e)
        {
            tmrAlarmZamani.Enabled = false;
            btnKur.Enabled = true;
            rbYeniden.Checked = false;
            rbKapat.Checked = false;
            lblMesaj.Text = "Herhangi bir görevi yok !";
        }

        private void Form1_Resize(object sender, EventArgs e)
        {
            if (FormWindowState.Minimized == WindowState)
            {
                Hide();
                notifyIcon1.BalloonTipText = lblMesaj.Text;
                notifyIcon1.ShowBalloonTip(5);
            }
        }

        private void Form1_FormClosed(object sender, FormClosedEventArgs e)
        {
            if (tmrAlarmZamani.Enabled == true)
            {
                if (MessageBox.Show("Zamanlandırlmış bir görev olduğu için uygulama kapatılamıyor. \nUygulamayı ve görevi kapatmakta karalımısınız ?", "Uyarı !", MessageBoxButtons.YesNo) == DialogResult.Yes)
                {
                    Application.Exit();
                }
             
            }
        }

       

        private void notifyIcon1_Click(object sender, EventArgs e)
        {
            this.Show();
            WindowState = FormWindowState.Normal;
        }

Listview eleman ekleme sıralı silme

Listview’i sevenler derneği açılsa üye olan ilk insan ben olurum herhalde. Bir kontrol bu kadar sevilmez… Neyse konuya dönelim, database den listview çekilen onlarca veri içinde listview üzerinden silme işlemi yaptığınızda db den verinin silindiğini gösterebilmek için listview i bir şekilde yenileriz.

Listview üzerin herhangi bir elemanı sildikten sonra focus alanı listview listesinin en başındaki elemana focuslanır. Örnek verecek olursak, e-posta adresimizdeki 30. sıradaki bir maili sildiğimizde otomatik olarak bir sonraki mail işaretlenir yani focus olur. Ancak bu olay listview de müdahele etmeden yapılamıyor.

listview-eleman-ekleme-silme

Mevzuyu anlatabildiysem listview e eleman nasıl eklenir, nasıl silinir, silinen elemandan sırasına göre elemana nasıl focus edilir görelim. Resimdeki gibi bir form ekranı düzenleyip listview e eleman ekleme kodu ile başlayalım.

Listview e eleman eklemek için;

1
2
3
4
5
6
7
 private void btnEkle_Click(object sender, EventArgs e)
        {
            ListViewItem lv = new ListViewItem();
            lv.Text = txtAdi.Text;
            lv.SubItems.Add(txtSoyadi.Text);
            listView1.Items.Add(lv);
        }

Listviewden sıralı eleman silmek için;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
 private void btnSil_Click(object sender, EventArgs e)
        {
            int secilenEleman = 0;
            if (listView1.Items.Count > 0)
            {
                secilenEleman = listView1.SelectedItems[0].Index;
            }

            listView1.SelectedItems[0].Remove();

            listView1.Focus();
            listView1.Items[secilenEleman].Selected = true;

        }

Hali hazırda örneği indirmek için alttaki bağlantıyı kullanabilirsiniz.

[wpdm_file id=9]