Geri git   Programlama ve Elektronik > Programlama Yazılım > C - C++ - C# - Visual C++ - Visual C# > Örnek Kodlar
Kayıt ol Yardım Community Bugünki Mesajlar Arama

Cevapla
 
Seçenekler Stil
Alt 17. May 2008, 03:33 AM   #1 (permalink)
Amatör
 
McDroPp - ait Kullanıcı Resmi (Avatar)
 
Üyelik tarihi: Mar 2008
Nerden: C# SQl Server 2008 İnformation Technology's Server Secretary And Aspx To lınk Tecnolojıes,Mybb
Mesajlar: 51
Standart PC İçi Arama Motoru

PC Arama Moturu
Bu örnekte C# ile PC içi arama motoru algoritması yazıyoruz. Windows işletim sistemindeki windows search gibi

Bu örnekte tıpkı windows search benzeri olan bir programın C# ile nasıl yapılacağını göstermek istiyorum. İlk başta kod olarak biraz fazla görünsede aslında sade bir yapısı var sadece arayüz olarakta daha şık görünmesini istediğim için biraz daha fazla kod yazmak zorunda kaldım. Programın temel çalışma prensibi C#'taki System.IO alanında bulunan Directory sınıfındaki GetFileSystemEntries(...) fonksiyonuna dayanır. Bu fonksiyon ile her bir dizine girildiğinde orada bulunan dosyalar ve klasörler isimleriyle bir string dizisine toplanıp tespit edilir ve buna göre arama işlemleri yapılır.

Programa CDEF dizinlerinde arama arama sırasında büyük-küçük harf duyarlılığının açık olup olmaması daha sınırlı bir alanda arama gibi çeşitli arama türlerinide nasıl eklendiğini kodlarda görebilirsiniz. Kodlarla ilgili tüm açıklamaları ise bizzat ilgili kodun yanına yorum olarak detaylı bir şekilde yazdım. Kaynak kodu ise sayfanın sonunda download edebilirsiniz. Artık koda geçmek gerekirse;

ilk önce kullanılan isim alanlarını belirtelim:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO; // directory sınfının ait olduğu isim alanı


şimdi ise Form_load kısmına bakalım:

public Form1()
{
//Çağdaş Üsfekes
// Çankaya üniversitesi - Bilgisayar mühendisliği

InitializeComponent();
}
string line;
string line2;
string git = null;

int find = 0; // arama sonucunda kaç sonuç bulunduğunun sayısını verir

int not = 0; // arama hatalarından sonra boş yere arama sonucu sayfasının açılmasını engeller

int tara = 0; // toplam taranan dosya sayısını verir

int x = 0; // arama süresinin hesaplanması için alınan değer.değeri saniye olarak label30'da yazdırılıyor

#region form load...

private void Form1_Load(object sender EventArgs e)

{

// bu kısımda programın ilk açılışında menülerin kapalı görünmesi için menünün içinde bulundu 2 adet

// groupbox ve arama sırasında detayları bize göstericek olan label ve picturebox'ların ilk başta görünmemesi için

// visible değerlerini false yapıyoruz

pictureBox5.Visible = false;

textBox2.ReadOnly = true;

label6.Visible = false;

label14.Visible = false;

label15.Visible = false;

label16.Visible = false;

label10.Visible = false;

pictureBox9.Visible = false;

groupBox1.Visible = false;

groupBox2.Visible = false;

pictureBox10.Visible = false;

button9.Visible = false;

radioButton3.Checked = true;

radioButton2.Checked = true;

}

#endregion


aramanın başlatılacağı butonun arka plan kodlarını yazalım

#region arama butonu...
private void button3_Click(object sender EventArgs e)

{

// arama işlemine başlanmasını sağlayan kod

label14.Text = "";

label15.Text = "";

label16.Text = "";

button3.Enabled = false; // arama yapılırken bir daha arama butonuna basılmasın diye enable=false yapıyoruz

pictureBox2.Enabled = false;

backgroundWorker1.RunWorkerAsync();

label14.Visible = true;

label15.Visible = true;

label16.Visible = true;

button9.Visible = true; // arama sırasında iptal butonunun görünürlüğü true yapılıyor

// arama sırasında arada kalan süreyi hesap edebilmek için burada timer etkinleştiriliyor.

arama_suresi.Enabled = true;

}

#endregion


Şimdi ise aramanın başlayacağı ve menüden yaptığımız ayarların uygulandığı asıl bölümü inceliyelim. Bu arada arama sırasında arka planda çok yoğun bir işlem gerçekleştiği ve bu yüzdende ekranın arama sırasında donmasını engelleyip kullanılabilir durumda tutmak için arama işimizi bir Backgroundworker ile yapıyoruz.Kodumuzu backgroundworker içine koyarak Do_Work Progress_Changed ve RunWorker_Completed adlı 3 fonksiyonu yazıyoruz.Bununla ilgili daha detayı msdn'den öğrenebilirsiniz

#region arama tetikleyen fonksiyon...
private void tarama(BackgroundWorker bDoWorkEventArgs eobject sender)

{

if (textBox1.Text.Length == 0) /////////////////////////////arama kutusu boş bırakılırsa hata veriyor.

{

MessageBox.Show("Arama kutusunu boş bırakamazsınız!" "Discoovery - Arama Hatası");

not++; // burada not değerini artırarak arama sonucu sayfasını açmasını engelliyoruz

}

if (textBox1.Text.Length != 0 && textBox2.Text.Length != 0)///////////////kullanıcının aramayı kendisinin istediği yerden başlatması

{

// burada arama C D gibi en baş dizinlerden değilde kullanıcının kendi belirlediği daha alt bi dizinden başlatılıyor.

// böylece aramak istediğiniz bir resim dosyası ise bulunma ihtimali yüksek olan "Resimlerim" klasörü ve daha alt

// dizinlerinde aratıyoruz böylece gereksiz yere tüm PC aramaktan kurtulup zaman kazanmış oluyoruz

string[] x = Directory.GetFileSystemEntries(textBox2.Text);

if (radioButton2.Checked) //dosya ara( müzik video text belgeleri vb)

{

foreach (string a in x)

search(sender as BackgroundWorker a e);

}

if (radioButton1.Checked) //klasör ara (sadece klasörler)

{

foreach (string a in x)

search1(sender as BackgroundWorker a e);

}

if (radioButton5.Checked) //dosya ve klasör ara

{

foreach (string a in x)

search2(sender as BackgroundWorker a e);

}

}

if(textBox1.Text.Length!=0 && textBox2.Text.Length==0) ////////////////sınırlı arama boş bırakılırsa arama burdan devam eder

{

if (radioButton4.Checked) //////////////////////webde ara( direk google'da arar ve arama sonuçlarının sayfasını görüntüler)

{

string a = textBox1.Text;

a = a.Replace(" " "+"); // google'da arama linkinin oluşturulması için aranan kelime içinde boş bırakılan

// her karakter '+' karakteriyle değiştirilir.

System.Diagnostics.Process.Start("http://www.google.com.tr/search?q=" + a);

// not değeri artırılır ve webde arama yapıldığı halde Pcde arama sonuçlarının listelendiği sayfanın

// açılmasının önüne geçilmiş olur. bunu nasıl kullandığımızı daha aşağıda tam olarak görebilirsiniz

not++;

}

if (radioButton3.Checked) ////////////////////////pcde ara (bilgisayarda aramanın başlatılacağı kod parçası)

{

if (!checkBox2.Checked && !checkBox3.Checked && !checkBox4.Checked && !checkBox5.Checked)

{

// eğer arama için hiç bir dizin seçilmediyse hata mesajı verir

// "not" değerini artırmamızın sebebi eğer işlem bu hata alanına girerse arama olmadığı halde arama sonucu

// sayfasının açılmasını engellemek.arama sonucu sayfasının açılacağı yere if(not==0) koşulunu koyarsak

// bu isteğimizi gerçekleştirebiliriz.

not++;

MessageBox.Show("Arama için dizin seçiniz" "Discoovery - Arama");

}

else

{

if (checkBox2.Checked) //C sürücüsünde arama

{

if (Directory.Exists("C:\\"))

{

string[] x = Directory.GetFileSystemEntries("C:\\");

if (radioButton2.Checked) //dosya ara

{

foreach (string a in x)

search(sender as BackgroundWorker a e);

}

if (radioButton1.Checked) //klasör ara

{

foreach (string a in x)

search1(sender as BackgroundWorker a e);

}

if (radioButton5.Checked) //dosya ve klasör ara

{

foreach (string a in x)

search2(sender as BackgroundWorker a e);

}

}

else

{

// eğer C sürücüsü bulunamazsa haat mesajı verir ve arama yapılmadan arama sonucu sayfasının

// açılmasını engellemek için not değerini artırıyoruz.

not++;

MessageBox.Show("C:\\ dizini bulunamadı" "Discoovery - Arama");

}

}

if (checkBox3.Checked) //D sürücüsünde arama

{

if (Directory.Exists("D:\\"))

{

string[] x = Directory.GetFileSystemEntries("D:\\");

if (radioButton2.Checked) //dosya ara

{

foreach (string a in x)

search(sender as BackgroundWorker a e);

}

if (radioButton1.Checked) //klasör ara

{

foreach (string a in x)

search1(sender as BackgroundWorker a e);

}

if (radioButton5.Checked) //dosya ve klasör ara

{

foreach (string a in x)

search2(sender as BackgroundWorker a e);

}

}

else

{

// D sürücüsü bulunamadı ise hata mesajı verir.

not++;

MessageBox.Show("D:\\ dizini bulunamadı" "Discoovery - Arama");

}

}

if (checkBox4.Checked) //E sürücüsünde arama

{

if (Directory.Exists("E:\\"))

{

string[] x = Directory.GetFileSystemEntries("E:\\");

if (radioButton2.Checked) //dosya ara

{

foreach (string a in x)

search(sender as BackgroundWorker a e);

}

if (radioButton1.Checked) //klasör ara

{

foreach (string a in x)

search1(sender as BackgroundWorker a e);

}

if (radioButton5.Checked) //dosya ve klasör ara

{

foreach (string a in x)

search2(sender as BackgroundWorker a e);

}

}

else

{

// E sürücüsü bulunamadı ise hata mesajı verir ve arama sonucunun sayfası açılmaması için not 1 artırılır

// eğer o sırada cd-room'da bi vcd veya dvd takılı değilse muhtemelen E sürücüsü bulunamıyacaktır.

not++;

MessageBox.Show("E:\\ dizini bulunamadı" "Discoovery - Arama");

}

}

if (checkBox5.Checked) //F sürücüsü-flaş disk

{

if (Directory.Exists("F:\\"))

{

string[] x = Directory.GetFileSystemEntries("F:\\");

if (radioButton2.Checked) //dosya ara

{

foreach (string a in x)

search(sender as BackgroundWorker a e);

}

if (radioButton1.Checked) //klasör ara

{

foreach (string a in x)

search1(sender as BackgroundWorker a e);

}

if (radioButton5.Checked) //dosya ve klasör ara

{

foreach (string a in x)

search2(sender as BackgroundWorker a e);

}

}

else

{

// F sürücüsünün bulunamama koşulunda çıkacak olan hata mesajı

not++;

MessageBox.Show("F:\\ dizini bulunamadı" "Discoovery - Arama");

}

}

}

}

}

}

#endregion


Şimdi ise aramanın yapıldığı ve recursive functions temeline dayanan 3 arama fonksiyonun kodlarını yazalım. Ben yazarken dosya arama için search() klasör arama için search1() ve hem dosya hem klasör arama içinde search2() olmak üzere 3 farklı fonksiyon yazdım. Aslında bunların hepsini birleştirip 1 fonksiyonda yazabilirdik belki kodumuz biraz daha kısa olurdu ama o zamanda arama hızı düşecekti çünkü hepsini bir fonksiyonda topladığımızda o fonk. daha uzun olacaktı ve arama sırasında da recursive işleminin gerçekleşmesi daha ağır adımlarla olacaktı. Kodları olabildiğince biririnden ayrı tutarak her bir fonksiyonu daaha sadeleştirmiş olduk.

#region arama fonksiyonları...
public void search(BackgroundWorker b string a DoWorkEventArgs e) //dosya arama(resim müzik video vb.)

{

try

{

// aşağıdaki a stringini line2'ye eşitlememizin sebebi arama sırasında hangi yolda arama yapıldığını

// ekranda devamlı güncel olarak görmek istememizdendir.line2.length değerini rapor ederek arama anında

// devamlı line2nin değişimini gözleyerek ekranda görebiliriz

line2 = a;

b.ReportProgress(line2.Length);

for (int i = 0; i <= 0; i++)

{

if (b.CancellationPending)

{

// arama sırasında arama iptal edilirse cancel değeri true edilir.

e.Cancel = true;

break;

}

// eğer adı "a" olan yolumuzun örneğin(C:\WINDOWS) devamına '\' koyarsak ve bu yolun geçerli olup olmadığı

// kontrol edersek bu yolun bir klasörmü yoksa bir dosyamı olduğunu anlarız eğer geçerli değilse dosyadır

// ve bizde bu fonksiyonda sadece dosya aradığımıza göre geçerli olmama koşulunu arıcaz

// örneğin C:\WIDOWS\eula.txt\ yolu geçerli değildir. ve bu koşula girer

if (!Directory.Exists(a + @"\"))

{

if (checkBox6.Checked)// arama sırasında küçük-büyük harf duyarlılığı checkli değil ise

{

// tara değeri o ana kadar kaç dosyanın arandığını belirtir

tara++;

// ve bu değeri rapor ederek ekranda arama sırasında güncel verileri alırız

b.ReportProgress(tara);

//fileinfo sınıfı ile aradığımız anahtar kelimenin o dosya isminde geçip geçmediğine bakarız

// eğer geçmiyorsa -1 değeri döner yani aradığımız kelimenin bu dosya olma olasılığı yoktur

// -1 değeri döndürmüyorsa içinde geçiyor demektir ve aradığımız kelimeyle ilişkili demektir

FileInfo f = new FileInfo(a);

if (f.Name.IndexOf(textBox1.Text) != -1)

{

find++;

b.ReportProgress(find);

// bu sonucu arama sonucu sayfasındaki listbox'a ekliyoruz.

listBox1.Items.Add(a);

}

}

if (!checkBox6.Checked) // aramada küçük-büyük harf duyarlılığı checkli ise

{

line = a;

tara++;

b.ReportProgress(tara);

FileInfo f = new FileInfo(a);

// yoldaki dosya isminde bulunan tüm harfleri küçük harf yapıp arama kutusundan girdiğimiz anahtar

// kelimeninde harflerini küçük yapıp eşleştiriyoruz yani küçük-büyük harf duyarlılığı kapalı

if (f.Name.ToLower().IndexOf(textBox1.Text.ToLower()) != -1)

{

// bulunan dosya sayısını bir artırıyoruz ve bunu raporluyoruz

find++;

b.ReportProgress(find);

listBox1.Items.Add(line);

}

}

}

else

{

// burada ise yolumuzun bir dosya değil bir klasör olduğu ve bu yüzdende içine girip tekrar devamında

// dosya veya klasör varmı diye bakmak için aramayı devam ettiririz.

// bu metot recursive(kendi kendini çağıran) fonksiyonlara tipik bir örnektir

string[] x1 = Directory.GetFileSystemEntries(a);

tara++;

foreach (string a1 in x1)

search(b a1 e);

}

}

}

catch

{

// try-catch bloğunda ise bazı dosyalara girememe olasılığına karşı programın hata verip kapanmayıp atlayıp

// deva etmesini sağlıyoruz

}

}

public void search1(BackgroundWorker b string a DoWorkEventArgs e) //klasör arama

{

// bu arama fonksiyonunda ise üsteki dosya aramada yaptığımız herşeyi klasör için yapıyoruz

try

{

line2 = a;

b.ReportProgress(line2.Length);

for (int i = 0; i <= 0; i++)

{

if (b.CancellationPending)

{

e.Cancel = true;

break;

}

if (Directory.Exists(a + @"\"))

{

tara++;

b.ReportProgress(tara);

DirectoryInfo d = new DirectoryInfo(a);

if (checkBox6.Checked)

{

if (d.Name.IndexOf(textBox1.Text) != -1)

{

find++;

b.ReportProgress(find);

listBox1.Items.Add(a);

}

}

if (!checkBox6.Checked)

{

line = a;

if (d.Name.ToLower().IndexOf(textBox1.Text.ToLower()) != -1)

{

find++;

listBox1.Items.Add(line);

}

}

string[] x1 = Directory.GetFileSystemEntries(a);

foreach (string a1 in x1)

search1(b a1 e);

}

else

{

}

}

}

catch

{

}

}

public void search2(BackgroundWorker b string a DoWorkEventArgs e) //dosya ve klasör arama

{

// bu aramada ise yukarıdaki methodların aynısını hem dosya hemde klasör için uyguluyoruz

try

{

line2 = a;

b.ReportProgress(line2.Length);

for (int i = 0; i <= 0; i++)

{

if (b.CancellationPending)

{

e.Cancel = true;

break;

}

if (Directory.Exists(a + @"\")) //klasör ise buraya girer

{

tara++;

b.ReportProgress(tara);

DirectoryInfo d = new DirectoryInfo(a);

if (checkBox6.Checked)

{

if (d.Name.IndexOf(textBox1.Text) != -1)

{

find++;

b.ReportProgress(find);

}

string[] x1 = Directory.GetFileSystemEntries(a);

foreach (string a1 in x1)

search2(b a1 e);

}

if (!checkBox6.Checked)

{

line = a;

if (d.Name.ToLower().IndexOf(textBox1.Text.ToLower()) != -1)

{

find++;

b.ReportProgress(find);

listBox1.Items.Add(line);

}

string[] x1 = Directory.GetFileSystemEntries(a);

foreach (string a1 in x1)

search2(b a1 e);

}

}

if (!Directory.Exists(a + @"\")) // dosya ise buraya girer

{

tara++;

b.ReportProgress(tara);

FileInfo f = new FileInfo(a);

if (checkBox6.Checked)

{

if (f.Name.IndexOf(textBox1.Text) != -1)

{

find++;

b.ReportProgress(find);

listBox1.Items.Add(a);

}

}

if (!checkBox6.Checked)

{

line = a;

if (f.Name.ToLower().IndexOf(textBox1.Text.ToLower()) != -1)

{

find++;

b.ReportProgress(find);

listBox1.Items.Add(line);

}

}

}

}

}

catch

{

}

}

#endregion

şimdi ise menüde bulunan sınırlı arama yapmak için dizin seçtiğimiz butonun kodunu yazalım. buton6 ile açılan pencereden klasör seçiyoruz ve oradan itibaren arama başlatıyoruz. buton7 ilede seçtiğimiz dizinin yazıldığı textbox'ı temizliyoruz

private void button6_Click(object sender EventArgs e)
{

// buton6 ile kullanıcının daha yerel ve sınırlı bir alanda arama yapması için dizin seçmesi sağlanıyor

//böylece arama sadece o klasör ve onun alt dizinlerinde bulunan tüm yerlerde olur

textBox2.Text = "";

FolderBrowserDialog fo = new FolderBrowserDialog();

DialogResult rs = fo.ShowDialog();

textBox2.Text = fo.SelectedPath;

}

private void button7_Click(object sender EventArgs e)

{

// seçilenin dizinin gösterildiği kutucuğu temizler

textBox2.Text = "";

}

Sıra geldi aramanın yapıldığı backgroundworker olaylarını yazmaya. yukarda da belirttiğimiz gibi bu olay içerisinde 3 fonksiyon olduğunu söylemiştik. Ve bunların faydasının ise ekranın donup kullanılamaz hale gelmesini önlemekti. bu 3 fonksiyonda şöyle:

private void backgroundWorker1_RunWorkerCompleted(object sender RunWorkerCompletedEventArgs e)
{

// arama sonlandığında sonuçlar burada ekrana yazılır

arama_suresi.Enabled = false;

// arama sırasında çalışan arama_süresi.timer arada geçen saniyeyi hesaplar ve x değerini ekrana basar.

label30.Text = x + " saniyede arandı";

// burada ise arayüzümüzün daha hoş görünmesi amacı ile hiç bir sonuç bulunamadıysa X işaretli bir resim

// ama sonuç bulunduysa check işaretli bir resim gösterilir

if (find != 0)

{

pictureBox15.Image = global:iscoovery___Search_Everything.Properties. Resources.Good;

label12.Text = "Toplam " + Convert.ToString(find) + " sonuç bulundu";

}

if (find == 0)

{

pictureBox15.Image = global:iscoovery___Search_Everything.Properties. Resources.Error;

label12.Text = "Hiç bir sonuç bulunamadı!";

}

if (not == 0)

{

// herhangi bir dizin seçilmeden veya arama kutusu boş bırakılarak arama yapılması sonucunda not değerini 1

// artırmıştık ve böylece boş yere arama sonucu sayfasının açılmasını engellemiştik. not değeri 0 ise

// not değeri artmamaış yani hiç bir hata mesajına girilmemiştir böylecede sonuç sayfası açılacaktır

tabControl1.SelectedIndex = 1;

label14.Text = "'" + textBox1.Text + "'" + " PC'de arandı";

}

// bir sonraki arama için tüm değerler 0'lanıyor

find = 0; // bulunan sonuç sayısı

tara = 0; // taranan dosya sayısı

not = 0;

button3.Enabled = true;

pictureBox2.Enabled = true;

button9.Visible = false;

pictureBox5.Visible = false;

label29.Text = "";

}

private void backgroundWorker1_ProgressChanged(object sender ProgressChangedEventArgs e)

{

// arama sırasında ekrana güncel olarak o anda aranan dosya sayısı bulunan dosya sayısı ve de

// aramanın sürdüğü dizini ekrana yazan fonksiyon

pictureBox5.Visible = true;

label14.Text = "'" + textBox1.Text + "'" + " PC'de aranıyor...";

label15.Text = "Taranan öğe sayısı: " + tara;

label16.Text = "Bulunan öğe sayısı: " + find;

label29.Text = line2;

button3.Enabled = false;

}

geriye ise soldaki ve sağdaki menülerin açılıp kapanma efektlerini verebilmemiz için onların visible değerleriyle oynamamız kaldı sıradaki kodları verip programı bitirelim:

private void pictureBox2_MouseClick(object sender MouseEventArgs e) // büyüteç resmi
{

// arama kutusunun yanında büyüteç resminin tıklanmasıyla aramayı başlatan bölüm

button3_Click(sender e);

}

private void button9_Click(object sender EventArgs e) // iptal butonu

{

// arama sırasında iptal butonun tıklanması ile arama sona erer

backgroundWorker1.CancelAsync();

}

private void label17_MouseClick(object sender MouseEventArgs e)

{

// programın 'hakkında' bilgilerini içeren pencereyi açar

Form2 f2 = new Form2();

f2.Show();

}

private void pictureBox8_MouseClick(object sender MouseEventArgs e)

{

// solda bulunan menüyü açmaya yarayan resim. üzerine tıklanınca menü görünür hale gelir

groupBox1.Visible = true;

pictureBox9.Visible = true;

pictureBox8.Visible = false;

label3.Visible = false;

}

private void pictureBox9_MouseClick(object sender MouseEventArgs e)

{

// soldaki açık olan menüyü kapamaya yarar

groupBox1.Visible = false;

pictureBox8.Visible = true;

pictureBox9.Visible = false;

label3.Visible = true;

}

private void pictureBox10_MouseClick(object sender MouseEventArgs e)

{

// sağdaki menüyü kapamaya yarar

pictureBox11.Visible = true;

pictureBox10.Visible = false;

groupBox2.Visible = false;

label1.Visible = true;

}

private void pictureBox11_MouseClick(object sender MouseEventArgs e)

{

// sağdaki menüyü açar

groupBox2.Visible = true;

pictureBox11.Visible = false;

pictureBox10.Visible = true;

label1.Visible = false;

}

private void pictureBox13_MouseClick(object sender MouseEventArgs e)

{

// aram sonucu sayfasından aramanın yapılacağı anasayfaya döner

listBox1.Items.Clear();

tabControl1.SelectedIndex = 0;

}

private void listBox1_MouseDoubleClick_1(object sender MouseEventArgs e)

{

// sonuçların listelendiği listbox'da istediğimiz sonuca çift tıklarsak

// o dosyanın bulunduğu bir alt dizin açılır

// örneğin sonucumuz C:\WINDOWS\eula.rtf ise buna tıkladığımızda C:\WINDOWS dizini açılır

git = listBox1.SelectedItem.ToString();

if (git != null)

{

FileInfo fi = new FileInfo(git);

System.Diagnostics.Process.Start(fi.DirectoryName) ;

}

}

private void arama_suresi_Tick(object sender EventArgs e)

{

// arama sırasında geçen süreyi saniye cinsinden hesaplıyan timer

x++;

}

böylece programımızı bitirmiş olduk. kodların nerde ne işe yaradıklarını olabildiğince yanlarında anlatmaya çalıştım. yeterince anlaşılır olmuştur sanırım. programın arayüzününde güzel görünmesi için yazdığımız kodları daha iyi görebilmeniz için kaynak kodu download etmenizde fayda var.

Dikkat etmek gerekirse bütün bu pencereler tek bir form üstünde açıldı. Bunun için 2 sayfası olan bir tabcontrol kullanmamız yeterli oldu. Tabcontrol boyutlarını form boyutlarına eşitlersek farklı sayfalar üstünde çalışabilmiş oluruz.

Birde son olarak belirtmek istediğim bir şey var. Bu programla yapılan arama hızı windows search ile yapılan arama hızıyla aynı olmayacaktır ondan biraz daha yavaş olacaktır. Bunun ise iki sebebi var. Birincisi kod içinde yazdığmız search() search1() search2() adlı arama fonksiyonlarında recursive methodunu kullanmamız. siz daha geliştirmek isterseniz iterative yöntemini deneyebilirsiniz çünkü iterative herzaman recursive yöntemine göre daha hızlıdır. ikinci sebep ise de Windows search direk işletim sistemi içindedir ve makina dilinden çalışır fakat bizim programımız windows üzerinden .NET Framework ile çalışır yani 2. dereceden diyebiliriz.
__________________
بِسْــــــــــــــــــــــمِ اﷲِارَّحْمَنِ ارَّحِيم

-------------------------------------------------

Bu Soysuzlar Bu Vatansızlar Sarsada Yurdumu Ben Yaratan'dan Alırım Asil Kanı ve Gücü.
-------------------------------------------------
McDroPp isimli Üye şimdilik offline konumundadır   Alıntı ile Cevapla
Cevapla


Yetkileriniz
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Açık
Smileler Açık
[IMG] Kodları Açık
HTML-KodlarıKapalı
Trackbacks are Kapalı
Pingbacks are Kapalı
Refbacks are Kapalı


Benzer Konular
Konu Konuyu Başlatan Forum Cevaplar Son Mesaj
Sitenizi Google vb. Arama Motorlarında Yerini Yükseltmek ve Ucuz ve Zahmetsiz Yolu shapseo Web Geliştirme Yazılımları 0 12. March 2009 05:12 PM