Coder

30 Kasım 2012

Winform da bold italic underline yapma

Form çalışma ekranın da kullanıcıya bir önceki yazıda ki(Formda metin stilini değiştirme) gibi formdaki label gibi kontrolün yazı stilini değiştirte biliriz. Kalın, eğik altı çizgili yazı stillerini nasıl ekletebiliriz görelim.

Resimdeki gibi form ekranına bir adet label ve 4 adet buton kontrolü ekleyerek kodlamaya geçebiliriz.

Kalın yani bold butonuna tıkladığımızda çalışacak kod. Burada ilk önce labe’ın bold özelliği true olup olmadığına bakıyoruz. Bold değilse ” label1.Font.Style | FontStyle.Bold ” ile label’ın önceki stilini referans alıp(önceki stili italik ve underline olabilir) üzerine bold özelliği ekliyor. İkin tıklamada eğer bold ise bold özelliğini kaldırıyor, regular yani default stil kazandırıyor.

Diğer italik ve underline butonları aynı mantıkta çalışıyor.
[cc lang="c#"] if (label1.Font.Bold == false)
{
label1.Font = new Font(label1.Font.FontFamily.Name, label1.Font.Size, label1.Font.Style | FontStyle.Bold);
}
else if (label1.Font.Bold == true)
{
label1.Font = new Font(label1.Font.FontFamily.Name, label1.Font.Size, FontStyle.Regular);
}[/cc]
İtalik butonunda çalışacak kodlar
[cc lang="c#"] if (label1.Font.Italic == false)
{
label1.Font = new Font(label1.Font.FontFamily.Name, label1.Font.Size, label1.Font.Style | FontStyle.Italic);
}
else if (label1.Font.Italic == true)
{
label1.Font = new Font(label1.Font.FontFamily.Name, label1.Font.Size, FontStyle.Regular);
} [/cc]

Underline, altı çizgili butonunda çalışacak kodlar

[cc lang="c#"]if (label1.Font.Underline == false)
{
label1.Font = new Font(label1.Font.FontFamily.Name, label1.Font.Size, label1.Font.Style | FontStyle.Underline);
}
else if (label1.Font.Underline == true)
{
label1.Font = new Font(label1.Font.FontFamily.Name, label1.Font.Size, FontStyle.Regular);
} [/cc]

Regular yani stil özelliği bulundurmayan butonuna çalışacak kodlar

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

29 Kasım 2012

En büyük sayıyı bulma

Başlık size biraz programlama dünyasına göre klişe bir örnek gelmiş olabilir. Genelde bu şekilde internet de aratma yaptığınızda gelen sonuçlar konsol ekranında girilen 3 sayıdan büyüğünü bulma gibi örnekler karşımıza çıkmıştır. Tabi arada farklı olanları saymazsak.

Böyle basit makaleyi nereden yazdım derseniz anlatayım; veri kayıt etmek için xml e ihtiyaç duydum.(bu aralar xml ile yatıp kalkıyorum) Girilen kayıtların haliyle benzersiz id numarası olması gerekirdi. Bunun içinde doğal olarak girilen her kayıta 1 er arttırmalı id numarası verdim. Bunun için kontroller yardımı ile daha önceden xml içine kaydedilmiş id leri alıp üzerine +1 ekleyerek gerçekleştirdim. Size sorayım, database deki gibi kaydedilmiş veriyi xml dosyamıza kaydettiğimiz veriyi silip başka veri eklediğimizde bu şekildeki senaryoda kaç tane id varsa o sayının 1 fazlası ekleneceği için daha önce kayıt edilmiş id numaraları kayıt eklenecekti.

Örneği yorumlarsak 10 adet kayıt eklendiğini var sayalım. 11. kayıt id si 10+1 yani 11 id no olarak kayıt edilecek. 7 numaralı id kayıtı sildiğimiz de 11. kayıt, xml dosyamızın içinde toplamda 9 kayıt olduğu için id si 9+1 yani 10 olarak kayıt edilecek. Xml dosyamıza dönüp baktığımızda iki tane 10 numaralı id kayıtı olacak. Ee nerde kaldı bunun benzersiz kayıtı ? İşte böyle bir senaryoda basit bir yöntem işimizi halledebilecek.

Xml dosyasına kaydedilen verilerin yalnızca id numaralarını alarak içlerinden en büyüğünü alıp +1 ekleyerek yeni kayıt oluşturabiliriz. Konuyu uzattığım özür dileyerek en büyük sayıyı bulma işine yarayan koda geçmek istiyorum.

Xml den alınan verileri combobox içine ekleyip içindeki verileri döndürerek Array.Sort ile en büyük sayıyı belirleyebiliriz. Xml dosya okuma kısmını konu karışmaması için atlamak istiyorum (Xml dosya okuma burada ki makale yardımı ile xml veriyi combobox içine yazdırabilirsiniz)

[cc lang="c#"] int[] sayilar = new int[comboBox1.Items.Count];

for (int i = 0; i < comboBox1.Items.Count; i++) { string eklenen = comboBox1.Items[i].ToString(); sayilar[i] = int.Parse(eklenen); } Array.Sort(sayilar); int enbuyuksayi = sayilar[sayilar.Length - 1]; MessageBox.Show(enbuyuksayi.ToString());[/cc]

28 Kasım 2012

Formda metin stilini değiştirme

Bazen uygulama çalışma zamanında(runtime) formdaki kontrollerin bazı özelliklerini kullanıcıya yetkisine vermek isteyebiliriz. Runtime kontrol konusuna giren bu makaleyi bir örnekle renklendirmek istiyorum.

Örneğimizden yola çıkarak; çalışan form üzerindeki label kontrolünün adını, fontunu veya font boyutunu değiştirmek istersek.

Resimdeki gibi bir form tasarlayalım ve konuyu pekiştirelim. Forma; bir adet label, textbox, combobox ve numericupdown kontrollerini ekledikten sonra kodlamaya geçebiliriz.

Kontrollerin ana isimlerini değiştirmeden olduğu gibi
ulaştım.

[cc lang="c#"]private void textBox1_TextChanged(object sender, EventArgs e)
{
label1.Text = textBox1.Text;
} [/cc]

Burada textbox’ımıza çift tıklayıp TextChanged olayına yazdığımızda yapılmak istenen çalışma anında textbox’a girilen değer aynı anda label da gözükmesi.

[cc lang="c#"] System.Drawing.Text.InstalledFontCollection yazitipi = new System.Drawing.Text.InstalledFontCollection();
foreach (FontFamily eklenen in yazitipi.Families)
{
comboBox1.Items.Add(eklenen.Name);
}
numericUpDown1.Minimum = 8;
numericUpDown1.Maximum = 80;[/cc]

Fontunu ve font büyüklüğü değiştirme kontrollerine geçmeden önce formun load olayına(form boş alanına çift tıklayarak girilen kısıma yani başlangıçtaki kısıma) sistemdeki, windows’un yazı font isimlerini combobox içine aktarıyoruz. Bunun haricinde numericUpDown1 kontrolünün maksimum ve minimun değerlerini giriyoruz.(isteğe bağlı)

[cc lang="c#"] private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
label1.Font = new Font(comboBox1.Text, label1.Font.Size);
}[/cc]

Combobox’ın SelectedIndexChanged olayına seçilen font ismini alarak font özelliğini ekliyoruz.

[cc lang="c#"] private void numericUpDown1_ValueChanged(object sender, EventArgs e)
{
int deger = int.Parse(numericUpDown1.Value.ToString());

label1.Font = new Font(label1.Font.FontFamily.Name, deger);

} [/cc]

Son olarak numericUpDown1 kontrolünün ValueChanged olayına girilen sayı değerlerini label font size özelliğine yazıyoruz.

11 Kasım 2012

C# dosya işlemleri

Masaüsütü uygulamamız için dosyalara, klasörlere ihtiyaç duymuşuzdur. Bu ihtiyaca karşılık hatırlatıcı bir kaç satır kod paylaşmak istedim.

File ve Directory sınıflarını kullanacağımız bu örneklerde bu iki sınıfı karıştırmamanız. Bu örnekler içinde openfilediretory kontrolünüde kullanacağız.

İlk örneğimiz resimdeki form tasarımı üzerinde, textbox daki değer adı ile yeni klasör oluşturalım.
[cc lang="c#"] bool varmi = Directory.Exists(“c:\\” + textBox1.Text);

if (varmi == false)
{
Directory.CreateDirectory(“c:\\” + textBox1.Text);
MessageBox.Show(textBox1.Text + ” isimli klasör oluşturuldu.”);
}
else
{
MessageBox.Show(“Oluşturulmadı çünkü “+ textBox1.Text + ” isimli klasör mevcut.”);
}[/cc]

Directory’ü klasör oluşturduğumuzda kullanırız, file ise dosya oluşturduğumuzda kullanırız. Alttaki örneğimizde openfiledialog kontrolünü de kullanarak seçilen dosya uzantısı ilgili textbox a yazdırdık.

[cc lang="c#"] string kopyalanandosyaadi;
private void button2_Click(object sender, EventArgs e)
{
openFileDialog1.ShowDialog();
textBox2.Text = openFileDialog1.FileName;

kopyalanandosyaadi = Path.GetFileName(textBox2.Text);

} [/cc]

kopyalanandosyaadi değişkenini global olarak tanımlamamızın nedeni sonraki işlemimizde yani dosyayı kopyalama işleminde kullanmamız olmasındandır. Alttaki örnekte gösterilen uzantı daki belirlediğimiz klasör içine kopyalayalım.

[cc lang="c#"] if (File.Exists(@”c:\\klasorum\\” + kopyalanandosyaadi))
{
MessageBox.Show(“Dosya zaten mevcut”);
}
else
{
File.Copy(textBox2.Text, “c:\\klasorum\\” + kopyalanandosyaadi);
MessageBox.Show(“Dosya kopyalandı”);

} [/cc]

Burada(File.Copy) kopyalanacak dosya ilk önce kopyalanan yerde sonrasında gelmekte. kopyalanan yer ve dosya adı, kopyalanacak dosya şekilde gelmektedir.

Son olarak mevcut klasörü silme işlemini yapalım. Klasör silme işlemi alttaki şekilde gerçekleşmede.

[cc lang="c#"] if (Directory.Exists(@”c:\\asd\\”))
{
Directory.Delete(“c:\\asd”, true);
MessageBox.Show(“Silindi”);
}
else
{
MessageBox.Show(“Dosya yerinde yok”);
}[/cc]

10 Kasım 2012

Xml dosya okuma

Bir önceki yazıda Xml dosya oluşturma veri eklemeyi uygulamıştık. Bu yazıda oluşturduğumuz ve veri eklediğimiz xml dosyasındaki verileri nasıl okuruz görelim. Xml dosya okuma işlemini 3 ayrı; textbox, combobox ve listview kontrollerin de göstererek konunun öğrenilmesi için daha verimli hale getirdim.

Uygulama çalıştığında resimdeki gibi veriler kontrollerimizde gözükecek. Form üzerinde çalışma yaptığım uygulamada ilk olarak textbox lara veriyi nasıl çekebiliriz görelim. Aşağıdaki resimdeki gibi xml dosyamızın yapısı incelemenizde fayda olacak.

Daha önceden oluşturduğumuz xmldosyam.xml isimli dosyasmızın içindeki Kullanici3 daki veriyi textboxlarımızda gösterelim.

[cc lang="c#"] XmlDocument doc = new XmlDocument();

doc.Load(“c:\\klasorum\\xmldosyam.xml”);
XmlElement root = doc.DocumentElement;
XmlNodeList kayitlar = root.SelectNodes(“/Rapor/kullanicilar”);

foreach (XmlNode secilen in kayitlar)
{
string sirasi = secilen.Attributes[0].InnerXml;

if (sirasi == “kullanici3″)
{

textBox1.Text = secilen["adi"].InnerText;
textBox2.Text = secilen["soyadi"].InnerText;
}
}[/cc]

Xml den combobox a dosyadaki bütün veriyi çekip gösterme;

[cc lang="c#"] XmlDocument doc = new XmlDocument();

doc.Load(“c:\\klasorum\\xmldosyam.xml”);
XmlElement root = doc.DocumentElement;
XmlNodeList kayitlar = root.SelectNodes(“/Rapor/kullanicilar”);

foreach (XmlNode secilen in kayitlar)
{

comboBox1.Items.Add(secilen["adi"].InnerText);
} [/cc]

Xml dosyasındaki verileri listview de gösterme;

[cc lang="c#"]XmlDocument doc = new XmlDocument();

doc.Load(“c:\\klasorum\\xmldosyam.xml”);
XmlElement root = doc.DocumentElement;
XmlNodeList kayitlar = root.SelectNodes(“/Rapor/kullanicilar”);

foreach (XmlNode secilen in kayitlar)
{

ListViewItem lv = new ListViewItem();
lv.Text = secilen["adi"].InnerText;
lv.SubItems.Add(secilen["soyadi"].InnerText);

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

09 Kasım 2012

Xml dosya oluşturma ve veri ekleme

Projelerimizde bazen küçük verileri bir yerde saklamak istemişizdir. Bu durumlarda yardıma koşan en basit text dosyası veriyi görüntüleme, sorgulama bakımından yetersiz olmaktadır. Bu gibi durumlarda yardımımıza xml gelmektedir. Xml genel olarak veri saklama ve farklı sistemler arasında geçişi sağlayan W3C tarafından tanımlanmış standarttır.

Basit bir örnek ile xml c3 projelerimizde nasıl kullanırız görelim. Bunun yanında bilgisayardaki herhangi bir dizine klasör nasıl oluşturulur bu örnek içinde de bulabilirsiniz. Resimdeki gibi form tasarlayarak örneği daha iyi anlayabilirsiniz.

Formu tasarladıktan sonra ilk önce c# da klasör nasıl oluşturulur Klasör oluştur buton clik olayına çift tıklayarak alttaki kodları harfiyen girelim.

[cc lang="c#"] private void btnklasor_Click(object sender, EventArgs e)
{

bool klasorvarmi = Directory.Exists(“c:\\klasorum”);
if (klasorvarmi == false)
{

Directory.CreateDirectory(“c:\\klasorum”);

MessageBox.Show(“Klasorum isimli dosya oluşturuldu !”);

}
}[/cc]

Burada yapılan işlem, bool değişken tip sayesinde klasörün var olup olmadığını sorguladık. Klasör yoksa Directory.CreateDirectory dizine klasör ekledik. Bunu yapmamın sebebi Windows 7 de direk C: dizinine xml gibi dosyaları oluşturma izin vermemesi. Xml dosyamızı bu klasörü oluşturmadan direk dizinde oluşturmaya kalktığımızda hata verecekti.

Gelelim oluşturduğumuz klasöre xml dosyamızı oluşturmaya. Bunun içinde xml oluştur buton clik olayına da alttaki kodları girelim.

[cc lang="c#"]private void btnolustur_Click(object sender, EventArgs e)
{
if (!File.Exists(“c:\\klasorum\\xmldosyam.xml”))
{
XmlTextWriter xmlolustur = new XmlTextWriter(“c:\\klasorum\\xmldosyam.xml”, null);

xmlolustur.WriteStartDocument();

xmlolustur.WriteComment(“oluşturulan xml hakkında bilgi”);

xmlolustur.WriteStartElement(“baslangic”);

xmlolustur.WriteEndDocument();
xmlolustur.Close();
}
else
{
MessageBox.Show(“Oluşturulmadı”);
}
}[/cc]

Buradan daha önceden oluştuduğumuz klasör içine xml uzantılı dosyamızı oluşturduk. Son olarak oluşturulan xml dosya içeriğine veri girmek. Bunun içinde 2 textbox ve buton yardımı ile parametreleri göndererek işlemi bitirebiliriz.

Yapı daha önce denemeyenler için biraz karışık gelmiş olabilir. Ekle butonuna alttaki kodları yazıp uyguladığınızda oluşturduğunuz xml dosyasını inceleyerek karmaşayı çözebilirsiniz.

Bu örnek ile xml nasıl oluşturulur, xml nasıl veri eklenir gibi sorularınızın cevabını vereceğini düşünüyorum.

[cc lang="c#"] private void btnekle_Click(object sender, EventArgs e)
{
if (File.Exists(“c:\\klasorum\\xmldosyam.xml”))
{
XmlDocument doc = new XmlDocument();
doc.Load(“c:\\klasorum\\xmldosyam.xml”);

XmlElement UserElement = doc.CreateElement(“kullanicilar”);

UserElement.SetAttribute(“baslik”, “kullanici”);

XmlElement kullanciadi = doc.CreateElement(“adi”);
kullanciadi.InnerText = textBox1.Text;
UserElement.AppendChild(kullanciadi);

XmlElement kullanicisoyadi = doc.CreateElement(“soyadi”);
kullanicisoyadi.InnerText = textBox2.Text;
UserElement.AppendChild(kullanicisoyadi);

doc.DocumentElement.AppendChild(UserElement);

XmlTextWriter xmleekle = new XmlTextWriter(“c:\\klasorum\\xmldosyam.xml”, null);
xmleekle.Formatting = Formatting.Indented;
doc.WriteContentTo(xmleekle);
xmleekle.Close();
}
}[/cc]

Powered by WordPress