Coder

29 Aralık 2012

Form üzerinde yazıcıdan çıktı alma

Benzer konu web ortamında bir çok blog,  site vs. yerde yazılmış. Alternatif olarak, konuya tam aşına olmayanlar için basit bir örnek yardımı ile paylaşmak istedim.  Örnekte form üzerindeki label  ismini, boyutunu ve stilini baskı adedini parametre girerek yazıcı çıktısını almak istiyorum.

cikti-almak

Resimdeki gibi bir form ekranı tasarlayalım. Ayrıca forma printDocument1 kontrolünü ekleyelim. Gerekli kontrollerin eklemesini bitirdikten sonra yazdır butonuna çift tıklayıp clik olayına gelelim.

[cc lang='csharp' line_numbers='false']private void btnYazdir_Click(object sender, EventArgs e)
{
short baskiAdeti = Convert.ToInt16(textBox1.Text);
printDocument1.PrinterSettings.Copies = baskiAdeti;
printDocument1.Print();
}[/cc]

Burada baskı adetini almak için textbox dan gelen değeri short değişken tipi ile değişken tanımlayarak atadık. Copies özelliği ile çıkartılacak kopya adetini tutmakta.   Bundan sonraki adım yazdırılacak nesneyi Graphics ile çizmek. Bunun için metod içinde yazdırmak istediğimizi yani label1 kontrolünü  Graphics değişkeni içine atıyoruz.

Burada label text ve label font unu ve diğerlerini kesinlikle girmemiz gerekir.  Brushes.Black ile yazdırılan yazının rengini belirtiyoruz. 50 50 ile yazdırılacak olanın konumu belirliyoruz.

[cc lang='csharp' line_numbers='false']private void Yazdirilacak(Graphics gg)

{
Graphics gr = gg;
gr.DrawString(label1.Text, label1.Font, Brushes.Black, 50, 50);
}[/cc]

Son olarak PrintPage olayı ile yazıcıya çıktı bilgilerini gönderiyoruz. Forma eklediğimiz printDocument1 kontrolünün Printpage olayına gelip oluşturduğumuz metodu çağırıyoruz.

[cc lang='csharp' line_numbers='false']

private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
Yazdirilacak(e.Graphics);
}

[/cc]

Deneme amaçlı çıktıyı pdf formatın da  yazdırdığınız da kopya sayısı kaçt tane girerseniz girin yalnızca 1 sayfa bastıracaktır. Ama direk yazıcıdan çıktı almak istediğinizde kaç adet istiyorsanız o kadar sayfa kopyasını çıkaracaktır.

 

24 Aralık 2012

Ado.Net veri kayıt et güncelle sil

Microsoft’un veriye erişmek için geliştirdiği teknoloji Ado.net ile veritabanımızdaki verilere ulaşarak veri alış verişi yaptırabiliyoruz.(Bu ilk cümleyi kurmak için harcadığım zamanı yazının devamı için harcamıyorum :) ) Sık sık kullandığımız bu teknolojiyi bazen unutabiliyoruz. Arayüz aracılığı ile basit bir kayıt nasıl yapılır yada güncelleme, silme… Hatırlatma ve öğrenme babında bu yazıyı yazmak istedim.

ado-net-kayit-guncelle-sil

Resimdeki gibi basit bir form hazırlayıp Ado.net teknolojisi sayesinde veritabanına nasıl kayıt girme, güncelleme, silme gibi işlemleri beraber yapalım. Formdan önce Management Studio da bir veritabanı oluşturup içerisine tblKullanıcılar(farklı bir isim verebilirsiniz) adında tablo oluşturarak devam edebiliriz.

ado-net-veritabani

Resimdeki gibi formu oluştururken kafanız karışmasın, öğrenme maksadı ile yaptığım için ayrı ayrı butonlar ile olayları uyguladım. Burada kayıdı göstermek için listview kontrolünü kullandım. Aynı zamanda kayıt edildikten sonra listview e kayıt edilen veriyi çektim.

Listview’e veritabanındaki veriyi göstermek için, kod içinde tekrar tekrar yazmamak için listview doldurma metodunu hazırladım.

[cc lang="c#"]

private void listviewDoldur()
{
listView1.Items.Clear();
SqlConnection sql = new SqlConnection(“server=.; database=coder; trusted_connection=true;”);

SqlCommand doldur = new SqlCommand(“select * from tblKullanicilar”, sql);
sql.Open();
SqlDataReader rdr = doldur.ExecuteReader();
while (rdr.Read())
{
ListViewItem li = new ListViewItem();
li.Text = rdr["ID"].ToString();
li.SubItems.Add(rdr["Adi"].ToString());
li.SubItems.Add(rdr["Soyadi"].ToString());
li.SubItems.Add(rdr["Telefon"].ToString());
li.SubItems.Add(rdr["Adres"].ToString());

listView1.Items.Add(li);
}

sql.Close();
}

[/cc]

Listview doldurma metodunu kayıt, güncelleme ve silme işlemlerinden sonra kullanacağız. Güncelleme veya silme işlemi yapabilmek için listviewden kayıt seçmemiz gerekir. Kayıtı seçip tekrar textboxlar içinde göstererek  kayıtlı veri üzerinde işlem yapabiliriz. Listview içindeki veriyi textboxlar içinde gösterebilmek için listview kontrolünün SelectedIndexChanged olayına alttaki kodları yazalım. id değişkenini güncelleme ve silme işleminde referans olarak kullanacağımız için  glabal olarak tanımladım.

[cc lang="c#"]

string id;
private void listView1_SelectedIndexChanged(object sender, EventArgs e)
{
if (listView1.SelectedItems.Count > 0)
{
ListViewItem li = listView1.SelectedItems[0];
id = li.SubItems[0].Text;
txtAdi.Text = li.SubItems[1].Text;
txtSoyadi.Text = li.SubItems[2].Text;
txtTelefon.Text = li.SubItems[3].Text;
txtAdres.Text = li.SubItems[4].Text;

}
}

[/cc]

İlk önce veritabanına kayıt işlemini gerçekleştirelim

[cc lang="c#"]

private void btnKaydet_Click(object sender, EventArgs e)
{
SqlConnection sql = new SqlConnection(“server=.; database=coder; trusted_connection=true;”);

SqlCommand cmd = new SqlCommand();
cmd.Connection = sql;
cmd.CommandType = System.Data.CommandType.Text;
cmd.CommandText = “insert into tblKullanicilar (Adi, Soyadi, Telefon, Adres) values (@adi, @soyadi, @telefon, @adres)”;
cmd.Parameters.AddWithValue(“@adi”,txtAdi.Text );
cmd.Parameters.AddWithValue(“@soyadi”, txtSoyadi.Text);
cmd.Parameters.AddWithValue(“@telefon”, txtTelefon.Text);
cmd.Parameters.AddWithValue(“@adres”, txtAdres.Text);

sql.Open();

int etkilenen = cmd.ExecuteNonQuery();

sql.Close();

if (etkilenen > 0)
{
MessageBox.Show(“Kayıt edildi…”);
}
else
{
MessageBox.Show(“Kayıt edilmedi !!!”);
}

//Listview i dolduruyoruz alttaki metod ile

listviewDoldur();

}

[/cc]

 

Kayıt edilmiş veriyi  güncelleme yapabilmek için;

 

[cc lang="c#"]

private void btnGuncelle_Click(object sender, EventArgs e)
{
SqlConnection sql = new SqlConnection(“server=.; database=coder; trusted_connection=true;”);

SqlCommand cmd = new SqlCommand();
cmd.Connection = sql;
cmd.CommandType = System.Data.CommandType.Text;
cmd.CommandText = “update tblKullanicilar set Adi=@adi, Soyadi=@soyadi, Telefon=@telefon, Adres=@adres”;
cmd.Parameters.AddWithValue(“@adi”, txtAdi.Text); // buradaki id global tanımladığımız değişken aracılığı ile listview de seçilen kayıdın id sini tutmakta
cmd.Parameters.AddWithValue(“@soyadi”, txtSoyadi.Text);
cmd.Parameters.AddWithValue(“@telefon”, txtTelefon.Text);
cmd.Parameters.AddWithValue(“@adres”, txtAdres.Text);

sql.Open();

int etkilenen = cmd.ExecuteNonQuery();

sql.Close();

if (etkilenen > 0)
{
MessageBox.Show(“Güncellendi…”);
listviewDoldur();
}
else
{
MessageBox.Show(“Güncelleme başarısız !!!”);
}
}

[/cc]

Kayıt edilmiş veriyi silmek için,

 

[cc lang="c#"]

private void btnSil_Click(object sender, EventArgs e)
{
SqlConnection sql = new SqlConnection(“server=.; database=coder; trusted_connection=true;”);

SqlCommand cmd = new SqlCommand();
cmd.Connection = sql;
cmd.CommandType = System.Data.CommandType.Text;
cmd.CommandText = “delete from tblKullanicilar where ID=@id”;
cmd.Parameters.AddWithValue(“@id”, id); // buradaki id global tanımladığımız değişken aracılığı ile listview de seçilen //kayıdın id sini tutmakta

sql.Open();

int etkilenen = cmd.ExecuteNonQuery();

sql.Close();

if (etkilenen > 0)
{
MessageBox.Show(“Güncellendi…”);
listviewDoldur();
}
else
{
MessageBox.Show(“Güncelleme başarısız !!!”);
}
}

[/cc]

14 Aralık 2012

Formlar arası veri taşıma

Web uygulamarın da sayfalar arasında veri taşınıldığı  gibi  masaüstü uygulamalarında da formlar arası veri taşına bilmekte. Örneğin kullanıcı sistemi ile çalışan masaüstü programında, kullanıcı girişi yapıldıktan sonraki kısımlarda  giriş yapan kullanıcı bilgisini(id, kullanıcı adı vs.) formlar arasında geçiş yaptırabiliyoruz. Veya en basit bir formda yapılan işlem sonucu başka bir formda yazdırabiliriz. Örnekler çok…

formlar-arasi-veri-transferi

Formlar arası veri transferini sağlamak için, web uygulamalarında olduğu gibi projeye c# için .cs uzantılı CodeFile boş kod dosyası ekleyip içerisine alttaki gibi bir sınıf ve değişken tanımlayın.

C#

[cc lang="c#"]

static class globalsinifim
{
public static string kullanici = null;
}

[/cc]

Bu tanımladığımız sınıf ve değişkeni kullanabilmek için projemiz içinde herhangi bir form da aşağıdaki gibi kullanabiliriz.

[cc lang="c#"]globalsinifim.kullanici = textBox1.Text; [/cc]

Bu şekildeki bir örnekte formda textbox daki değeri global değişkenimize atadık. Taşıyacağımız diğer Form2 formunda global değişkene atadığımız değeri kullanabilmek, örneğin label da gösterebilmek için yapılması gereken;

[cc lang="c#"]label1.Text = globalsinifim.kullanici; [/cc]

şeklinde istediğimiz formda kullanabiliriz.

Visual Basic

Vb.net tarafında benzer şekilde .vb uzantılı boş CodeFile dosyası oluşturup değişken tanımlayın. Visual Basic tarafındaki tek fark oluşturduğunuz dosya adında modul oluşturmak. C# tarafında oluşturulan dosya ismi önemsizdi. Çünkü içindeki sınıf üzerinden değişken tanımlanmaktaydı.

Vb tarafında durum biraz farklı, oluşturulan boş kod ismi ile module ismi aynı olması gerekir. Projeye CodeFile.vb dosyası ekleyip ismini globalsinifim olarak değiştirin. Alttaki kodları girin.

[cc lang='vbnet' line_numbers='false']

Module globalsinifim

Public kullanici As String = Nothing

End Module

Module globalsinifim

Public kullanici As String = Nothing

End Module

[/cc]

Herhangi bir form da global değişkenimizi aşağıdaki gibi kullanabiliriz.

[cc lang='vbnet' line_numbers='false']globalsinifim.kullanici = textBox1.Text [/cc]

Başka bir formda veriyi gösterebilmek için kullanımı;

[cc lang='vbnet' line_numbers='false']label1.Text = globalsinifim.kullanici [/cc]

şeklinde istediğimiz formda kullanabiliriz.

07 Aralık 2012

ArrayList ve struct örneği

Bu makalede ArrayList sınıfı ve struct yapısını uygulamada nasıl kullanırız basit bir örnek ile anlatayım.

Struct yapısnı bir çok kaynaktan okuyup aklınızda bir şeyler canlanmıştır. Burada bende tekrar etmek istemiyorum. Ama birşeyler söylemeden de geçmek istemiyorum. Struct şöyle de düşünebilirsiniz; listview e kayıt edeceğimiz bir liste şeklinde kayıt kümemiz olsun. Bu veriyi listview kontrolünü kullanmadan, liste şeklinde ram üzerinde tutabilir , gerektiği zamanda sabit bir yere toplu bir şekilde kayıt edebilirsiniz. Struct’ı böyle düşünebilirsiniz.

Arraylist ise klasik dizilere nazaran daha esnek bir yapıya sahiptir. Arraylist sayesinde sabit sınır tanımlamadan istediğiniz kadar kullanabilirsiniz.

Struct yanında arralist i, baklavanın yanında dondurma gibi düşünebilirsiniz. İkisini kullanarak satırlarca yazdığınız kodlar yerine birkaç satırda işinizi görebilirsiniz. Fazla uzatmadan örnek uygulamamıza geçmek istiyorum. Öncelikle resimdeki gibi form ekranı düzenleyerek başlayabiliriz. Burada yapılan iş kişilerin ad, soyad, memleket gibi bilgilerini tutmakta.

Bu bilgileri liste şeklin de tutabilmek için struct yapısını tanımlayalım.

[cc lang="c#"] struct kisiler
{
public string ad, soyad, memleket;
public override string ToString()
{
return ad + soyad + memleket;
}
} [/cc]

Ardından arraylist ile oluşturduğumuz yapı şeklinde listeye ekleyelim.

[cc lang="c#"]

//using System.Collections; eklemeyi unutmayın

ArrayList kayitlar = new ArrayList();
private void btnekle_Click(object sender, EventArgs e)
{
kisiler kisi;
kisi.ad = txtad.Text;
kisi.soyad = txtsoyad.Text;
kisi.memleket = txtmemleket.Text;

kayitlar.Add(kisi);
} [/cc]

Böylelikle istediğiniz kadar veri ekleyip tutabilirsiniz. Tutuğunuz bu verileri listview kontrolünde göstermek için listele ismini verdiğim buton olayına alttaki kodları yazıyoruz.

[cc lang="c#"] private void btnlistele_Click(object sender, EventArgs e)
{
foreach (kisiler item in kayitlar)
{
ListViewItem lv = new ListViewItem();
lv.Text = item.ad.ToString();
lv.SubItems.Add(item.soyad.ToString());
lv.SubItems.Add(item.memleket.ToString());
listView1.Items.Add(lv);
}

} [/cc]

03 Aralık 2012

Barkod oluşturma programı yapımı

Çubuklu çizgilerin bir arada bulunduğu çeşitli kodlama yöntemleriyle sunulan, yalnızca makinaların okuyabileceği şekilde olan şeylere kendimizi bildik bileli barkod diyoruz. Hikayeyi fazla uzatamayacağım. Benzer konuda bir çok makale yazılmış, hikayem gibi bu konuda kısa, basit yöntem ile girilen değerlerin barkod karşılığını söz deyimi ile barkod oluşturma programını birlikte yapalım.

Basit yöntem ile oluşturulan barkod şöyle; alttaki buton yardımı ile indirilen barkod fontlarını windows klasörü içindeki font klasörüne yükleyin.

[viral-lock][wpdm_file id=2][/viral-lock]

Daha önceki yazımda(Formda metin stilini değiştirme) formdaki herhangi bir yazının fontunu değiştire biliyorduk. Barkod oluşturmasını da aynı yöntem ile yapacağız.

Fontları ilgili yere yükledikten sonra boş form ekranına textbox, label, button ve combobox kontrolleri ekleyin. Combobox içine 3 tane item ekleyin (3 of 9 Barcode, Code 128, EAN-13 Half Height) olduğu gibi yazın, çünkü windows font içerisinden çağrılan isim aynı olması gerekir. (İşinizi garantiye almak istiyor, sorun yaşamak istemiyorsanız buradaki yazıda bilgisayarınızdaki fontları combobox içine ekletebilirsiniz.)

Font olayını hallettikten sonra kod kısmına geçebiliriz. Button clik olayına alttaki kodları yazmanız yeterli.

[cc lang="c#"] label1.Text = textBox1.Text;
label1.Font = new Font(comboBox1.Text, label1.Font.Size, FontStyle.Regular); [/cc]

Textbox içine değer girip combobox dan istediğiniz barkod fontu seçip ekrana yazdırabilirsiniz. Daha fazlasını isteyenler iletişime geçebilir…

Güncelleme bilgi !

Barkodu bu şekilde oluşturabiliyoruz. Fakat barkod okuyucuları oluşturduğumuz bu biçimi okumaya biliyor. Yazımı paylaştıktan   sonra barkod okuyucu ile okutabildim.  3 of 9 fontlu barkodu direk okumadı, girilen rakam veya yazının başına ve sonuna * koyarak Ör: *234234* şekilde yazılan yazının  3 of 9 fontlu biçimini barkod okuyucu 234234 olarak okuyabilmekte.

Barkod da sabit bir karakter uzunluğu yoktur. Örnekte yaptığımız textbox alanına 1 yazıp barkodunu çıkartsak onuda okuyabilir.

Powered by WordPress