Programcıların klavye alırken dikkat etmesi gerekenler

Selamlar,

Öncelikle programcıların için kritik olan klavye tuşları çoğunlukla şunlardır;

  1. ENTER TUŞU
  2. TAB TUŞU
  3. SHİFT
  4. TIRNAK (e)
  5. SPACE
  6. NOKTALI VİRGÜL VE İKİ NOKTA ÜST ÜSTE TUŞLARI
  7. OPERATÖR (KÜÇÜK/BÜYÜK/EŞİTTİR)
  8. CAPS LOCK

Kesinlikle ilk üç tuşun büyük olmasına özen gösterin ve bunun dışında diğer tuşları da mümkün olduğunca büyük tutmaya bakın.

Ayrıca en önemlisi bana kalırsa sizin alışkanlıklarınızı taşıyabilecek bir klavyedir. Bu nedenle klavyeniz bozulmuşsa veya notebook klavyesinden normal klavyeye geçiyorsanız mümkün olduğunca klavyenizin birebirini almayı tavsiye ediyorum.

Nasıl daha hızlı kod yazılır?

Giriş

Selamlar, bu yazı tamamen  tecrübelerimden ortaya çıkardığım bir yazıdır.

Uzun yazılardan hoşlanmadığınızı bilerek direkt listeler halinde oluşturuyorum.

  1. Çalışmalardan önce netlik kazandırmak
    1. Mümkünse Mockup
    2. Mümkünse Wireframe çizimi
    3. Hiç biri değilse en azından el ile kağıda tüm netlik çıkartılmalı
  2. OOP Kullanarak (Mümkünse Framework)
  3. Test yazarak (Unittest, Daha doğrusu kodu yazmadan önce testini yazmak)
  4. IDE kullanarak (Önerilen: JetBrains IDE’s)
  5. Project Management Tool (Proje yönetimi aracı, Önerilen: Trello)
  6. Screenshot monitor (Veya benzeri bir Timer)
  7. Sakin müzikler

Unutmayın net olmayan şeyler sizi yolun ortasında her daim strese sokar, yavaşlatır. Projeyi her adımda netleştirin ve aynı performansı yakalamaya çalışın.

*Not: Müzik konusunda emin olmamakla birlikte bana göre önemli olan uzun süre aynı performansta çalışmaktır. Bunu da başınızı ağrıtanlarla değil sizin konsantrasyonunuzu artıran müzikler ile yapabilirsiniz.)

Nesne Yönelimli Programlama (OOP) nedir?

OOP1_am

oop

Nesne Yönelimli Programlama nedir?

İngilizce:Object Oriented Programming olarak adlandırılan ve dilimize Nesne Yönelimli Programlama adıyla çevrilen programlam anlayışı 1960’lı yılların sonunda bir gereksinim olarak çıkmıştır. Nesne Yönelimli Programlamanın çıktığı zaman programlama tekniklerinin bilgisayarların performansına ayak uydurması gerekliydi. Oysa ki günümüzde giderek etkisini yitiren yordamsal programlama adıyla yürütülen projelerde kod parçaları ayrı sayfalarda birden çok kullanılıyor ve kodların yazılımcıdan yazılımcıya değişerek karmaşıklık seviyesini artıyordu. Bu durum hem hem bilgisayarları hem de yazılım maaliyetini artıyordu.

Bilim adamları bu durumu Genetik bilimini göz önüne alarak gerçekleştirdiler. Belirli nesnelerden yeni nesneler türetip aynı genlerimiz gibi yazılım kodlamasının içerisnideki evrimi çok daha basit hale getirmeyi başardılar.

 

Viki’den alıntı: NYP ayrıca, bilgi gizleme (information hiding), veri soyutlama (data abstraction), çok biçimlilik (polymorphism) ve kalıtım (inheritance) gibi yazılımın bakımını ve aynı yazılım üzerinde birden fazla kişinin çalışmasını kolaylaştıran kavramları da yazılım literatürüne kazandırmıştır.

Tasarım şablonları

Oluşturucu Tasarım Şablonları

Teklik(Singleton) Tasarım Şablonu

Fabrika(Factory) Tasarım Şablonu

Soyut Fabrika(Abstract Factory) Tasarım Şablonu

İnşaatcı (Builder) Tasarım Şablonu

Prototip(Prototype) Tasarım Şablonu

Yapısal Tasarım Şablonları

Adaptör(Adapter) Tasarım Şablonu

Vekil(Proxy) Tasarım Şablonu

Köprü (Bridge) Tasarım Şablonu

Cephe(Façade) Tasarım Şablonu

Dekoratör (Decorator) Tasarım Şablonu

Kompozit (Composite) Tasarım Şablonu

Sinek Siklet (Flyweight) Tasarım Şablonu

Davranışsal Tasarım Şablonları

Strateji (Strategy) Tasarım Şablonu

Durum (State) Tasarım Şablonu

Yineleyici (Iterator) Tasarım Şablonu

Memento Tasarım Şablonu

Observer Tasarım Şablonu

Sorumluluk Zinciri(Chain of Responsibility) Tasarım Şablonu

Ziyaretçi(Visitor) Tasarım Şablonu

Şablon (Template) Tasarım Şablonu

Komut (Command) Tasarım Şablonu

Aracı (Mediator Tasarım Şablonu)

C#’da Veritabanı İşlemleri

C#’da Veritabanı İşlemleri

C# veya ASP.net gibi platformlarda Veritabanı işlemleri dediğimiz zaman aklımıza hemen ADO.NET gelmeli. ADO.net .NET platformunun modern Veritabanı sınıf nesnelerine sahip teknolojidir. Bu teknolojinin iki temel sınıfı vardır. Bunlar DataSet Sınıfları ve .NET Veri Sağlayıcı Sınıflarıdır.

DataSet Sınıfları
DataSet sınıfları, çevrımdışı daha çok masaüstü programlamada veri depolama ve yönetme işlemlerini gerçekleştirmek için kullanılır. Özellikle İlişkisel Veritabanı, XML ve XML Webservisleri üzerinden veriçekmek için kullanılır.

.NET Veri Sağlayıcı Sınıfları
Veri sağlayıcı sınıflarsa farklı türdeki veri tabanlarına bağlanmak için kullanılırlar. Bu farklı türdeki veri tabanları SQL Server .NET Veri Sağlayıcısı, OLE DB .NET Veri Sağlayıcısı ve Diğer .NET Veri Sağlayıcı türleri tarafından bağlanabilir.

ADO.NET Veri Sağlayıcıları

 

ado.net_veri_saglayicilari

SQL Server için veritabanı bağlanma kodu


System.Data.SqlClient.SqlConnection baglanti;
baglanti= new System.Data.SqlClient.SqlConnection();
baglanti.ConnectionString= "Data Source=VERİKAYNAĞI;Initial Catalog=VERİTABANIADİ;User ID=USERADİ; Password=ŞİFRE; Connection TimeOut=60";

SQL Server 7.0’dan önceki sürümlerine veritabanı bağlanma kodu


System.Data.OleDB.OleDbConnection baglanti;
baglanti = new System.Data.OleDb.OleDbConnection();
baglanti.ConnectionString="Provider=SQLOLEDB; Data Source=ProdServ; Initial Catalog=Pubs; Integrated security=SSPI";

DİKKAT:Microsoft Access veri kaynağı, tek veri tabanından oluşur. SQL Server verikaynağı ise birden fazla veri tabanından oluşur. Bu yüzden SQL Server veritabanı bağlantıcümlesinde Initial Catalog parametresi kullanılır.

Microsoft Access 2003 sürümü için veritabanı bağlantı kodu (MDB uzantılar için)

System.Data.OleDb.OleDbConnection baglanti;
baglanti= new System.Data.OleDb.OleDbConnection();

baglanti.ConnectionString=@”Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\Deneme\Personel.mdb”;

Microsoft Access 2010 sürümü ve üzerisi için veritabanı bağlantı kodu (Accdb uzantılar için)


System.Data.OleDb.OleDbConnection baglanti;
baglanti = new System.Data.OleDb.OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0; Data Source=C:\Deneme\personel.accdb");

Veritabanı bağlantısı açmak ve kapamak


baglanti.Open(); // Bağlantıyı açar
baglanti.Close(); // Bağlantıyı kapatar

Veritabanı bağlantı durumunu kontrol etmek


if(baglanti.State==ConnectionState.Closed)
MessageBox.Show("Bağlantı kapalı");
else if (baglanti.State==ConnectionState.Open)
MessageBox.Show("Bağlantı açık");

Örnek bir Access 2010 uygulaması yapalım

 

Kaynak kodlar:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;
namespace _1213BDDers07_01
{
public partial class Form1 : Form
{
public Form1()
{
HSancak Nesne Tabanlı Programlama II Ders Notları
InitializeComponent();
}
OleDbConnection bag= new
OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data
Source=C:\Users\HSK\Documents\personel.accdb");
//Form yüklenirken DataGrid dolduruluyor
private void Form1_Load(object sender, EventArgs e)
{
if (bag.State == ConnectionState.Closed)
bag.Open();
DataTable dt = new DataTable();
OleDbDataAdapter da = new OleDbDataAdapter("SELECT * FROM Tablo1", bag);
da.Fill(dt);
dataGridView1.DataSource = dt;
}
//Listeleme Butonu
private void button1_Click(object sender, EventArgs e)
{
if (bag.State == ConnectionState.Closed)
bag.Open();
DataTable dt = new DataTable();
OleDbDataAdapter da = new OleDbDataAdapter("SELECT * FROM Tablo1", bag);
da.Fill(dt);
dataGridView1.DataSource = dt;
}
//Ekleme Butonu
private void button2_Click(object sender, EventArgs e)
{
if (bag.State == ConnectionState.Closed)
bag.Open();
OleDbCommand komut = new OleDbCommand("INSERT INTO
Tablo1(ADI,SOYADI,MAAS) VALUES('" + textBox1.Text + "','" + textBox2.Text +
"','" + float.Parse(textBox3.Text) + "')", bag);
komut.ExecuteNonQuery();
DataTable dt = new DataTable();
OleDbDataAdapter da = new OleDbDataAdapter("SELECT * FROM Tablo1", bag);
da.Fill(dt);
dataGridView1.DataSource = dt;
}
//Silme Butonu
private void button3_Click(object sender, EventArgs e)
{
if (bag.State == ConnectionState.Closed)
bag.Open();
OleDbCommand komut = new OleDbCommand("DELETE FROM Tablo1 WHERE
ADI='"+textBox1.Text+"' AND SOYADI='"+textBox2.Text+"'",bag);
komut.ExecuteNonQuery();
DataTable dt = new DataTable();
OleDbDataAdapter da = new OleDbDataAdapter("SELECT * FROM Tablo1", bag);
da.Fill(dt);
dataGridView1.DataSource = dt;
HSancak Nesne Tabanlı Programlama II Ders Notları
}
//Güncelleme Butonu
private void button4_Click(object sender, EventArgs e)
{
if (bag.State == ConnectionState.Closed)
bag.Open();
OleDbCommand komut = new OleDbCommand("UPDATE Tablo1 SET MAAS=" +
float.Parse(textBox3.Text) + " WHERE ADI='" + textBox1.Text + "' AND
SOYADI='" + textBox2.Text + "'", bag);
komut.ExecuteNonQuery();
DataTable dt = new DataTable();
OleDbDataAdapter da = new OleDbDataAdapter("SELECT * FROM Tablo1", bag);
da.Fill(dt);
dataGridView1.DataSource = dt;
}
//Arama Butonu
private void button5_Click(object sender, EventArgs e)
{
if (bag.State == ConnectionState.Closed)
bag.Open();
DataTable dt = new DataTable();
OleDbDataAdapter da = new OleDbDataAdapter("SELECT * FROM Tablo1 WHERE
ADI='"+textBox1.Text+"'", bag);
da.Fill(dt);
dataGridView1.DataSource = dt;
}
//Form kapanırken bağlantı kapatılıyor
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
bag.Close();
}
//DataGrid ten seçilen satıra ait bilgiler TextBox’ alara aktarılıyor
private void dataGridView1_SelectionChanged(object sender, EventArgs e)
{
textBox1.Text = dataGridView1.CurrentRow.Cells[1].Value.ToString();
textBox2.Text = dataGridView1.CurrentRow.Cells[2].Value.ToString();
textBox3.Text = dataGridView1.CurrentRow.Cells[3].Value.ToString();
}
//Kayıt eklemenin bir başka yöntemi
//string sorgu = "insert into personnel(Ad, Soyad, PNO, TCNO, Unvan, Bolum,
Cinsiyet, Dogum)
// values
(@ad,@soyad,@pno,@tcno,@unvan,@bolum,@cinsiyet,@dogumtarihi)";
//OleDbCommand cmd= new OleDbCommand(sorgu,baglanti);
//cmd.AddWithValue.Add("@ad",txtad.Text);
//cmd.AddWithValue.Add("@soyad",txtsoyad.Text);
//cmd.AddWithValue.Add("@pno",txtpno.Text);
//... gibi
//bablanti.open();
//cmd.ExecuteNonquery();
//balanti.close();

 

Aynı örneği bu sefer SQL Server için oluşturalım


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
namespace _1213BDDers08_05
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
SqlConnection bag = new SqlConnection(@"Data Source=HSKPB\SQLEXPRESS;
Initial Catalog=OgrenciVT; Integrated Security=True");
void baglan()
{
if (bag.State == ConnectionState.Closed)
bag.Open();
}
void listele()
{
DataTable dt = new DataTable();
SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM Ogrenci", bag);
da.Fill(dt);
dataGridView1.Columns[0].HeaderText = "Öğrenci No";
dataGridView1.Columns[1].HeaderText = "Adı";
dataGridView1.Columns[2].HeaderText = "Soyadı";
dataGridView1.Columns[3].HeaderText = "Bölümü";
dataGridView1.DataSource = dt;
}
HSancak Nesne Tabanlı Programlama II Ders Notları
private void Form1_Load(object sender, EventArgs e)
{
baglan();
listele();
dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
}
private void button1_Click(object sender, EventArgs e)
{
baglan();
listele();
}
private void button2_Click(object sender, EventArgs e) // EKLEME
{
baglan();
SqlCommand komut = new SqlCommand();
komut.Connection = bag;
komut.CommandText = "INSERT INTO Ogrenci(OGRNO, ADI, SOYADI, BOLUMU)
VALUES ('" + textBox1.Text + "','" + textBox2.Text + "','" + textBox3.Text
+ "','" + textBox4.Text + "')";
komut.ExecuteNonQuery();
listele();
bag.Close();
}
private void button3_Click(object sender, EventArgs e) // GÜNCELLEME
{
baglan();
SqlCommand komut = new SqlCommand();
komut.Connection = bag;
komut.CommandText = "UPDATE Ogrenci SET ADI='" + textBox2.Text + "',
SOYADI='" + textBox3.Text + "', BOLUMU='" + textBox4.Text + "' WHERE
OGRNO='" + textBox1.Text + "'";
komut.ExecuteNonQuery();
listele();
bag.Close();
}
private void button4_Click(object sender, EventArgs e) // SİLME
{
baglan();
SqlCommand komut = new SqlCommand();
komut.Connection = bag;
komut.CommandText = "DELETE FROM Ogrenci WHERE OGRNO='" + textBox1.Text
+ "'";
DialogResult s;
s = MessageBox.Show(textBox1.Text + " Numaralı Öğrenci Silinsinmi",
"Silme İşlemi", MessageBoxButtons.YesNo);
if (s == DialogResult.Yes)
{
if (komut.ExecuteNonQuery() >= 1)
HSancak Nesne Tabanlı Programlama II Ders Notları
{
listele();
MessageBox.Show("Kayıt Silindi");
}
else
MessageBox.Show(textBox1.Text + " Numaralı Öğrenci Sistemde
Kayıtlı Değil!!!");
}
else
MessageBox.Show("Kayıt Silinmedi");
bag.Close();
}
private void button5_Click(object sender, EventArgs e) // ARAMA
{
baglan();
DataTable dt = new DataTable();
SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM Ogrenci WHERE
OGRNO='" + textBox1.Text + "'", bag);
da.Fill(dt);
dataGridView1.DataSource = dt;
bag.Close();
}
private void dataGridView1_SelectionChanged(object sender, EventArgs e)
{
textBox1.Text = dataGridView1.CurrentRow.Cells[0].Value.ToString();
textBox2.Text = dataGridView1.CurrentRow.Cells[1].Value.ToString();
textBox3.Text = dataGridView1.CurrentRow.Cells[2].Value.ToString();
textBox4.Text = dataGridView1.CurrentRow.Cells[3].Value.ToString();
}
}
}

 

Directory sınıfı

Directory sınıfı

Directory sınıfının diğer methodlar içerisinde kendini farklılaştırıcı hiç bir özelliği bulunmamaktadır. Yalnızca statik sınıflar metotlar içerir.

Örnek kaynak kodlar:


string adres;
adres = @"C:\WINDOWS";
DirectoryInfo dosyabilgisi = new DirectoryInfo(adres);
MessageBox.Show(

"Dosya adı:" + dosyabilgisi.Name + "\n" +
"Dosya yolu: " + dosyabilgisi.FullName + "\n" +
"Dosyanın oluşturulma tarihi:" + dosyabilgisi.CreationTime + "\n" +
"Dosyaya son giriş tarihi:" + dosyabilgisi.LastAccessTime + "\n" +
"Son değişiklik zamanı:" + dosyabilgisi.LastWriteTime + "\n" +
"Son erişim zamanı:" + dosyabilgisi.LastAccessTime + "\n" +
"Dosya var mı :?" + dosyabilgisi.Exists + "\n" +
"Klasör adı:" + dosyabilgisi.Name + "\n" +
"Bir üst klasör:" + dosyabilgisi.Parent + "\n" +
"Kök Dizin:" + dosyabilgisi.Root + "\n"

);

Sonuç:

directory_sinifi

Fileinfo sınıfı

string adres=@"C:\WINDOWS\deneme.txt";
FileInfo d=new FileInfo(adres);
Console.WriteLine("Öznitelikler: "+d.Attributes);
Console.WriteLine("Oluşturulma tarihi: "+d.CreationTime);
Console.WriteLine("Var mı? "+d.Exists);
Console.WriteLine("Uzantı: "+d.Extension);
Console.WriteLine("Tam adres: "+d.FullName);
Console.WriteLine("Son erişim zamanı: "+d.LastAccessTime);
Console.WriteLine("Son değişiklik zamanı: "+d.LastWriteTime);
Console.WriteLine("Boyut: "+d.Length);
Console.WriteLine("Klasör adı: "+d.Name);
Console.WriteLine("Bulunduğu klasör: "+d.DirectoryName);

Path sınıfı:

string adres=@"C:\dizin\deneme.txt";
Console.WriteLine("Uzantı: "+Path.GetExtension(adres));
string yeniAdres=Path.ChangeExtension(adres,"jpg");
Console.WriteLine("Yeni uzantı: "+Path.GetExtension(yeniAdres));
string adres2=@"C:\klasör";
Console.WriteLine("Yeni adres: "+Path.Combine(adres,adres2));
Console.WriteLine("Klasör: "+Path.GetDirectoryName(adres));
Console.WriteLine("Dosya adı: "+Path.GetFileName(adres));
Console.WriteLine("Uzantısız dosya adı: "+Path.GetFileNameWithoutExtension
Console.WriteLine("Tam adres: "+Path.GetFullPath(adres));
Console.WriteLine("Kök dizin: "+Path.GetPathRoot(adres));
Console.WriteLine("Geçici dosya adı: "+Path.GetTempFileName());
Console.WriteLine("Geçici dosya dizini: "+Path.GetTempPath());
Console.WriteLine("Dosya uzantısı var mı? "+Path.HasExtension(adres)
Console.WriteLine("Alt dizin ayıracı: "+Path.AltDirectorySeparatorChar
Console.WriteLine("Dizin ayıracı: "+Path.DirectorySeparatorChar);
Console.Write("Geçersiz dosya adı karakterleri: ");
char[] dizi=Path.GetInvalidFileNameChars();
foreach(char b in dizi)
Console.Write(b+" ");
Console.Write("\nGeçersiz adres karakterleri: ");
char[] dizi2=Path.GetInvalidPathChars();
foreach(char b in dizi)
Console.Write(b+" ");
Console.WriteLine("\nAdres ayırıcı karakter: "+Path.PathSeparator);
Console.WriteLine("Kök dizin ayıracı: "+Path.VolumeSeparatorChar);

dosya_ozellikleri_c_sharp_ornek

Projeyi indir

C# ‘da Dosyalama işlemleri

C#’da Dosyalama İşlemleri

Dosyalama işlemleri çeşitli türdeki dosyaların içlerindeki bilgileri okumak ve yazmak gibi iki aşamadan oluşur. Bu aşamalar içerisinde de farklı türdeki dosyalar C#’da farklı okuma işlemi gerçekleştirilir. Örneğin bir yazı türündeki dosyayı okumak için StreamReader, binary türündeki dosyaları okumak içinse BinaryReader kullanılır.

Bu dosyalama işlemlerinden herhangi birini gerçekleştirmek için programımızın en başına


using System.IO; // Dosyalama işlemleri için kullanacağımız isim uzayı (bkz: C# Giriş çıkış isim uzayı)

Nereye ekleceksiniz?

using_io_kullanimi

C#’da Text Dosyalama işlemleri | StreamReader ve StreamWriter

Öncelikle bir sınıf ekledik ve bu sınıftan bir nesne türeterek işlem yapabiliriz. Eğer bir sınıftan nesne türeteceksek ilk aklımıza gelen şey new operatörü olmalıdır.

StreamReader Kullanım


StreamReader stroku = new StreamReader(yol); // Burada yol dosyanın adresidir.

Örnek bir Reader (Okuma) işlemi


StreamReader SR = new StreamReader(@“C\dosyalama\deneme.txt”);
SW.WriteLine(textBox1.Text);
SW.Close(); // veri kaybına uğramamak için dosyayı kapatıyoruz.

StreamWriter Kullanım


StreamWriter stryaz = new StreamWriter(yol); // Burada yol dosyanın adresidir.

Örnek bir Writer (Yazma)işlemi


StreamWriter SW = new StreamWriter(@“C:\dosyalama\deneme.txt”);
SW.WriteLine(textBox1.Text);
SW.Close();

Bir adet örnek yapalım. Formumuzu oluşturalım ve içerisinde

  • 1 tane ListBox
  • 1 tane TextBox
  • 3 tane Button

Harddiskimizin C bölmesine bir klasör oluşturalım. Normal şartlar altında C dizinimizi direkt olarak kullanacaktık fakat bu alan içerisinde Windows bulunduğu için korumalıdır. Biz de bir alt klasör oluşturup içerisinde işlemleri yapacağız. Bu dosya içerisine de islem.txt seklinde text dosyası oluşturalım.

dosyalama_klasoru

Formumuzu aşağıdaki gibi tasarlayalım.

visual_studio_stream_reader_ornek_uygulama

Ekleceğimiz diyalog pencereleri:

open_file_dialog_and_save_file_dialog_pencelerinin_gosterimi

Dosya oku butonu için kodlar


// Dosya okuma işlemini biraz daha otomatikleştirelim
// Bunun için OpenDialog penceresini kullanalım.
openFileDialog1.ShowDialog();
string dosya_yolu = openFileDialog1.FileName;
listBox1.Items.Clear();
StreamReader oku = new StreamReader(@dosya_yolu);
string satir;
while((satir=oku.ReadLine())!=null)
{
listBox1.Items.Add(satir);
}

oku.Close();

Yazma butonu için kodlar


saveFileDialog1.ShowDialog();
string dosya_yolu=saveFileDialog1.FileName;
StreamWriter yaz = new StreamWriter(@dosya_yolu);
yaz.WriteLine(textBox1.Text);
yaz.Close();

Dosya ekle çin kodlar


saveFileDialog1.ShowDialog();
string dosya_yolu = saveFileDialog1.FileName;
StreamWriter ekle = File.AppendText(@dosya_yolu);
ekle.WriteLine(textBox1.Text);
ekle.Close();

Projeyi indir

FileStream

FileStream sınıfını StreamReader’dan farkı her türlü dosyaya destek sunma özelliğidir. Filestream sınıfı dosyaların açma, yazma ve bunun yanında da dosyalama işlemlerinde istenilen senkronizasyona ve filtrelemeye göre iyi bir performansa çalıştırılabilir.

 

FileStream Nesne = FileStream (Dosya_Yolu,Dosya_modu,Erişim_tipi,Paylaşım Tipi);

 


FileStream fs = new FileStream(@"c:\Dosyalama\deneme.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite,FileShare.ReadWrite);

  • Dosya_yolu:Dosyanın yolun bellirteceğimiz kısım.
  • Dosya_modu:6 şekli vardır.filestream_c_sharp

    Append: Üzerine ekleme yapar.

    Create: Dosya yoksa oluşturacak, varsa üzerine yazılır.

    Create New: Dosya varsa bile yeni bir dosya oluşturur.

    Open: Dosya varsa varolan dosyayı açar.

    OpenOrCreate: Dosya yoksa yeni oluşturur, varsa dosyayı açar.

    Truncate: Dosyanın mutlak var olması gerekir. Önceki dosyayı tamamen silerek dosya açar. Dosya açıldığında 0 baytır.

  • Erişim_tipi: Dosya erişebilirlik özelliğidir. 3 Özellik bulunur.Read: Dosyaya yalnızca okuma erişimi (amacı) verilmiştir.

    ReadWrite: Dosyaya hem okuma hem de yazma erişimi verilmiştir.

    Write: Yalnızca yazma erişim kontrolu verilmiştir.

  • Paylaşım Tipi: Dosya açıkken paylaşımlı olup olmadığı özellikleridir. Bu özellik sayesinde programın programın Windows ve diğer programlar ile paylaşımını kısıtlayabiliriz. 6 Özellik bulunurDelete: Dosyaya silinebilir özelliği verir. Böylece kullanıcı dosya açıkken bile dosyayı silebilir.

    Inheritable: Dosya açıkken yalnızca kısıtlayıcı alt işlemler tarafından erişilebilir.

    None: Tüm kısıtlamalar mevcuttur. Dosya açıkken kullanıcı dosya içerisinde okuma, yazma veya silme işleminde bulunamaz.

    Read: Dosya açıkken okuma paylaşımına olanak sağlar.

    ReadWrite: Hem okuma hem yazma paylaşımı verir.

    Write: Yalnızca yazma paylaşımı verir.

Örnek:

filestream_ornek_goster

Kaynak kodlar:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;

namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
FileStream fs = new FileStream(@"c:\Dosyalama\deneme.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite,FileShare.ReadWrite);
StreamReader sr = new StreamReader(fs);
string kayit;
while ((kayit = sr.ReadLine()) != null)
{
lbx_kayit_no.Items.Add(kayit);
kayit = sr.ReadLine();
lbx_adi.Items.Add(kayit);
kayit = sr.ReadLine();
lbx_soyadi.Items.Add(kayit);
}
sr.Close();
fs.Close();
}

private void btn_kayit_ekle_Click(object sender, EventArgs e)
{
if (txt_kayit_no.Text == "" || txt_adi.Text == "" || txt_soyadi.Text == "")
{
MessageBox.Show("Tüm alanları doldurunuz!");
}
else
{
lbx_kayit_no.Items.Add(txt_kayit_no.Text);
lbx_adi.Items.Add(txt_adi.Text);
lbx_soyadi.Items.Add(txt_soyadi.Text);
}
}

private void lbx_kayit_no_SelectedIndexChanged(object sender, EventArgs e)
{
lbx_adi.SelectedIndex = lbx_kayit_no.SelectedIndex;
lbx_soyadi.SelectedIndex = lbx_kayit_no.SelectedIndex;
}

private void btn_kayit_sil_Click(object sender, EventArgs e)
{
int indexno = lbx_kayit_no.SelectedIndex;
if (indexno >= 0)
{
lbx_kayit_no.Items.RemoveAt(indexno);
lbx_adi.Items.RemoveAt(indexno);
lbx_soyadi.Items.RemoveAt(indexno);
}
else
{
MessageBox.Show("Silenecek kaydı seçiniz");
}
}

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
FileStream fs = new FileStream(@"c:\Dosyalama\deneme.txt", FileMode.OpenOrCreate, FileAccess.Write);
StreamWriter sw = new StreamWriter(fs);
int ks, i;
ks = lbx_kayit_no.Items.Count;
if (ks > 0)
{
for (i = 0; i < ks; i++) { sw.WriteLine(lbx_kayit_no.Items[i].ToString()); sw.WriteLine(lbx_adi.Items[i].ToString()); sw.WriteLine(lbx_soyadi.Items[i].ToString()); } } else { MessageBox.Show("Yazılacak kayıt yok."); } sw.Close(); fs.Close(); } } }

Projeyi indir

BinaryReader

İkili tipteki dosyalar (video,resim,ses) üzerinde işlem yapmaya sağlar.

MenuStrip Kontrolü

MenuStrip (MainMenu)

Formların başlangıcında bulunan açılır menülerdir. Menü elemanlarından oluşur. Kullanıcıların birden çok araçlara kısayol ile ulaşmalarını amaç edinir.

MenuStrip kontrolü ekleme

menu_strip_visual_studio_ekleme

Menü öğelerine isim verirken & işareti kullanılarak, kullanıcın
klavyenin ALT tuşuyla bu öğeyi çalıştırmasını sağlanabilir. & işareti hangi karakter ile kullanılırsa
(hangi karakterin solundaysa) kısa yol olarak o karakter kullanılır.
Yandaki şekilde &Dosya ile ALT+D tuş kombinasyonuyla Dosya menüsü açılır.

MenuItem Özellikleri

  • Checked: Menü öğesinin yanında seçili olduğuna dair bir işaretin gözükmesini sağlar
  • Enabled: Menü öğesinin aktif durumda olup olmadığını belirler
  • RadioCheck: Öğenin seçilme stilinin RadioButton düğmesi olarak gözükmesini sağlar.
  • ShortCutKeys: Menüye ulaşım için bir kısa yol tanımlar .
  • ShowShortCutKeys: Menünün kısa yolunun, isminin yanında gözükmesini belirler.
  • MenuItems: Alt menülerin tutulduğu koleksiyondur.

menu_strip_visual_studio

Örneği indir

Timer kontrolü

Timer Kontrolü

Belirli bir süre içerisinde belirlediğimiz kodların tekrar tekrar çalıştırılmasına sağlayan kontroldür. Bu kontrol içerisinde yalnızca tik olayı vardır. Bir tikin ne kadar hızlı veya yavaş olabileceğini ayarlayıp buna göre istediğimiz kodların çalışmasını sağlayabiliriz.


// Timerı açmak için
Timer1.Start();
// Timer durdurmak için
Timer1.Stop();

Timer Interval Özelliği

Timerın en önemli özelliğinin tik olayını söylemiştik. Tik olayının hızınıysa Interval özelliğiyle sağlarız. Bu da en önemli özelliğine özellik katan kısmıdır. Intervala milisaniye cinsinden deger veririz.

1000 milisaniye – 1 saniye
10000 milisaniye – 10 saniye
60000 milisaniye – 1 dakika (60 saniye)


Timer1.Interval = 2000;

Tarih ve saati dinamik bir şekilde programın isminde gösterelim

Timer ekleyelim.
timer_visual_studio

Formumuzun üzerine çift tıklayarak Form_Load olayına kodlarımıza yazalım

timer1.Interval = 1000; // her 1 saniye içerisinde güncellenecek
timer1.Start();

Eklediğimiz Timer altta gri bölge üzerine yerleşecektir. Çift tıklayarak Tick olayına girelim ve aşağıdaki kodları yazalım.
cift_tik_timer

// Zaman biçiminde değişken oluşturup değişkene bugünün tarih ve zamanını gönderiyoruz
DateTime t = DateTime.Now;
this.Text = t.ToLongTimeString(); // Zamanı alıp string tipine değiştiriyoruz ve formun başlığına eşitliyoruz

Örnek proje 1 (Bu projenin button eklenmiş hali)

Örnek proje 2 (C# ‘da kayan yazı yapımı (örneği) -Biraz daha geliştirilmiş örnek)

Örnek proje 3

RichTextBox Kontrolü

RichTextBox nedir?

Normal bir textbox üzerinde yalnızca belirli işlemler yapabiliriz. Yani biçimsel olarak fontunu büyütme, font rengini değişme gibi işlemler yapabilirken RichTextBox’da metinler bir editörün içerisinde bulunuyor ve bir Word belgesi özelliklerine sahip oluyor. Bu sayede büyük bir textbox içerisinde madde işaretlemelerinden yazılan metinlerin büyütülmesi, küçültülmesi gibi işlemler bile yapabiliyoruz.

RichTextBox özellikleri

  • ZoomFactor: Metinin büyütülüp / küçültülmesini sağlar. Bu özellik günümüzde tarayıcılardaki % ‘lik oran gibidir. Örn: Mozilla Firefox ctrl+ veya ctrl- ile metni yakınlaştırıp, uzaklaştırmak gibi.
  • WordWrap: Metni kaydırmaya yarar. Satırın uzunluğunun editöre sığmadığı zamanlarda satırın sonraki bölümünün alt satıra geçerek scroll bar oluşturmasını sağlar.
  • Detechurls: Bağlantı olarak girilen yazıların otomatik olarak link olarak görülmesini sağlar(Linklabel olarak gösterir.).
  • Lines:Sadece string dizisi olarak tutar.
  • Bullentintend: Satırların madde işaretinden kaç piksek açıkta olduğu ayarıdır.
  • SelectedText: Seçili olan metnin tutulduğu özellik.
  • SelectedBullet:Seçilen madde işaretlerini işaretleme için kullanılır.
  • SelectedFont: Seçili metnin rengini ayarlayabileceğimiz özellik.
  • Find: Metin içerisinde arma yapıldığında kullabilecek özellik.
  • Loadfile: Dosya yükleme işlemlerinde kullanılacak özellik.
  • SaveFile: Dosyayı kaydetmek için kullanılacak özellik.
  • Undo: Yapılan işlemleri geri almak için kullanabilecek özelllik.
  • Redo: Geri alınan işlemi yineler.
  • Textchanged: Metin kutusu içerisinde yazı – text değişikliğinde meydana gelecek olaylar özelliği.

Basit bir örnek:

RichTextBox ekleyip ekrandaki duruma getirelim.

rich_text_box_visual_studio

rich_text_box_ornek_basit

İçerisine metin girelim. Örneğin bu günlerde Diren Gezi Parkı dememizin yerinde olacağını düşünüyorum.

icerisine_verilen_link_rich_textbox

Butonları düzeltelim.

diren-gezi-parki

Diyalogları ekleyelim.

font_ve_color_dialog_pencelerinin_eklenmesi

Form tasarımında eklediğimiz

RichTextBox ‘ın name özelliğini rtxt_bilgi

Renk buttonunun name özelliğini btn_font

Font buttonunun name özelliğiniyse btn_font

yapalım.

Bu değişikliklere göre kaynak kodlar şu şekilde;


private void btn_font_Click(object sender, EventArgs e)
{
fontDialog1.ShowDialog();
rtxt_bilgi.SelectionFont = fontDialog1.Font;
}

private void btn_renk_Click(object sender, EventArgs e)
{
colorDialog1.ShowDialog();
rtxt_bilgi.SelectionColor = colorDialog1.Color;
}

Sonuç:

Font

diren_gezi_parki_richtextbox_ornek

Renk

diren_gezi_parki_richtextbox_ornek_RENK

Projeyi indir

Örnek 2: Gelişmiş Proje

rich_textbox_ornek_2_indir

Proje indir

Form Uygulamaları

Form Uygulamaları

Formlar kullanıcılarla etkileşimi sağlayan Windows işletim sisteminden bildiğimiz ‘Pencereler’ ‘dir. Form üzerinde ayrı bir form tercih etmek istediğimizde kullanmamız gereken çeşitli kodlar bulunur. Bu kodları bulmak için öncelikle bir form oluştırmanız gerekir.

Visual Studio’da proje içerisinde yeni form oluşturmak

Form açmanın bir kaç farklı yöntemi vardır biz bunlardan iki tanesini öğrenelim. Bu yöntemlerden ilki Solution Explorer’den

windows_form_ekleme_yontemi_1

ikincisiyse Project menüsünden.

windows_form_ekleme_yontemi_2

Her iki yöntem de geleceğiniz ortak ve son aşama ise aşağıdaki görüntüdür.

windows_form_ekleme

Form uygulamalarımızda birden çok form ekledikten sonra şunu bilmemiz gerekir. Eklediğimiz form bir sınıf olarak eklendiğinden sınıf içerisinden bir nesne türetilmek zorundadır. Bu sayede bu nesneyi bir button gibi kullanarak özelliklerini kullanabiliyoruz.

Nesne türetmek için her zaman kullandığımız operatör new operatörüdür.


// FormName formadi = new FormName()
// Projedeki bulunduğumuz form adı (FormName özelliği) Form1 olduğunu düşünüğümüzde
Form1 FRM1 = new Form1();

Bulunduğumuz Form ekranını kapatma veya gizleme


// Bulunduğumuz formu kod ile kapatma
FRM1.Close();
// Bulunduğumuz kodun görünürlüğünü gizlemek
FRM1.Visible = false; // veya this.Visible = false;

Bulunduğumuz formdan başka bir forma geçmek


// Geçiş yapacağımız form2 olsun.
/*
ALGORİTMA 1.BULUNDUĞUN FORMUN GÖRÜNÜRLÜĞÜNÜ GİZLE 2. GEÇİŞ YAPACAĞIN FORMA GEÇ
*/
this.Visible= false;
Form2 FRM2 = new Form2();
FRM2.Show(); // veya FRM2.ShowDialog(); Bu kullanım diyalog kutusu ile gösterir. Diğeri ile farkı bu kullanımda diğer formların kitlenerek yalnızca aktif formun kullanabilmemesidir.

Başlangıç Formunu değiştirmek

c_sharp_acilis_formunu_degistirme

Form kapatılınca “Form kapatılsın mı?” diyalog penceresi oluşturmak


DialogResult s;
s = MessageBox.Show("Form kapatılsın mı?", "Kapatma İşlemi", MessageBoxButtons.YesNo);
if (s == DialogResult.Yes) e.Cancel = false;
else e.Cancel = true;

Herhangi bir tuşa basarak formu kapatma

Örneğin F10’a basarak programı kapatmak istediğimizi düşündüğümüzde;


if ((e.KeyCode == Keys.F10))
{
Application.Exit();
}
else MessageBox.Show("Kapatmak icin CTRL + F10 tuşuna basınız");

Form Özellikleri

  • Acceptbutton: Herhangi bir form aktif iken aktif tuşu oluşturmanızı yarar. Çoğunlukla Enter Tuşudur. Örneğin Enter tuşu buna örnektir. Entere bastığızda gelen işlem bir Acceptbutton Form özelliğidir.
  • Cancelbutton: Deaktif tuşu oluşturmanıza yarar. Çoğunlukla Esc tuşu atanır.
  • Opacity: Opaklık ayarı.
  • Startposition: Formumuz açıldığı zaman hangi posizyonda (sol en alt köşe, sol köşeye yaslı, sağ taraf vb..) ayarları yapabildiğimiz özellik.
  • TopMost: Formumuzu tüm pencelerin önünde göstermeye yarayan özellik.
  • Minimumstyle, Maximumstyle, borderFormun tasarımsal özelliklerini ayarlayabileceğimiz özellikleri.

Form olayları

  • Click: Form üzerinde tıklandığı zaman meydana gelecek olay.
  • Cloasing: Form kapanmadan hemen önce gerçekleşecek olay.
  • Form_Load: Form yüklenince gerçekleşecek olaylar.

Form Methodları

  • Show: Formu göstermeye yarar.
  • Hide: Formu gizler. Visible görünümünü kapatmayla aynı işlevi görür.
  • Close:Formu kapatır.

Basit bir form örneği:

visual_studio_basit_birformornegi

İndir