Merhabalar, C# RichTextBox İçinde Arama Yapmak yazım ile C# eğitim setime devam ediyorum. Bu dersimizde bir windows nesnesi olan richtexbox içerisindeki yazılar içinde arama yapma işleminden bahsedeceğim.
C# RichTextBox İçinde Arama Yapmak
Eğer projenizde richtexbox kullanıyorsanız, içerisindeki yazılar içerisinde arama yapmak istiyor olabilirsiniz. Belki de bir okulda proje ödevi olarak richtextbox ile ilgili bir ödev verilmiştir. (ki bu daha olası)
Bu dersimizde bu konuyu işleyeceğiz. Ancak kodlara geçmeden önce şunu söylemek istiyorum. Vereceğim kodlar bir word üzerinde arama yapma şekline benzemiyor. Aranmak istenen kelime, yazı içerisinde bulunduğunda, bulunan kelimelerin arka plan rengi değiştiriliyor. Bu durumda her hangi bir yere tıklama yaptığınızda bu işaretlemeler kalkmayacaktır. Bu yüzden bu işaretlemeleri kaldırmak için ayrı bir işlem yapmanız gerekmektedir.
Eğer bu durum sizin için çok önemli bir konu değilse, yani bir word üzerinde yapılan arama gibi fare ile seçilme şeklinde bir arama yöntemi olup olmaması önemli değilse, aşağıda vereceğim kodlar işinize yarayacaktır. Ayrıca büyük küçük harf duyarlılığı da kodlar arasında yer almaktadır.
Şimdi gelelim form tasarımı kodlarımıza…
İlk olarak arama formu tasarımını vereyim.
Şimdi bu formumuzun kodlarınız verelim…
public partial class AramaYap : Form { public AramaYap() { InitializeComponent(); } public string bul; public int Buyuk_Kucuk_Esle = 0; private void btn_cikis_Click(object sender, EventArgs e) { Close(); } private void btn_arama_yap_Click(object sender, EventArgs e) { bul = txt_aranacak_kelime.Text; if (chk_buyuk_kucuk_duyar.CheckState == CheckState.Checked) Buyuk_Kucuk_Esle = 1; Close(); } }
Burada gördüğünüz gibi, aranacak kelime ve büyük küçük eşleştirme bilgilerini almak için public değişkenimiz var. Arama yapma butonumuza tıkladığımızda aranacak kelimeyi ve checkbox’un seçim durumunu alıyoruz.
BİLGİ: Burada Buyuk_Kucuk_Esle değişkenimizin varsayılan değeri 0 olarak ayarlandı. Bu sebeple sadece eğer seçili ise değeri 1 yap dedik. Bunun sebebi değer checkbox seçili değilse zaten değer 0 kalacaktır ve eşleşmeye bakılmadan arama yapılacaktır.
Şimdi, anaform üzerindeki arama yap butonunun kodlarına bakalım. Zaten tüm işlemler bu kısımda yer alıyor.
İlk olarak yapılan arama işaretlemelerini temizlemek için hazırladığım metodu vereyim.
void AramaTemizle() { // Bulunan kelimenin arkaplan rengini değiştirdiğimiz için, aramayı temizle işlemi gerekiyor. richTextBox1.SelectionStart = 0; richTextBox1.SelectAll(); richTextBox1.SelectionBackColor = Color.White; }
Arama Yapan Kodlar
private void btn_bul_Click(object sender, EventArgs e) { AramaTemizle(); // yeni aramada, önceki aramadan kalan işaretlemeleri temizlemesi için. AramaYap fr = new AramaYap(); fr.ShowDialog(); string kelime = fr.txt_aranacak_kelime.Text; // büyük küçük harf eşleştirilebilmesi için Regex sınıfı gereklidir. Regex reg; if (fr.Buyuk_Kucuk_Esle == 1) reg = new Regex(kelime); // Büyük küçük eşleşmesine bakılır. else reg = new Regex(kelime, RegexOptions.IgnoreCase); // IgnoreCase büyük küçük eşleşmeye bakmamasını söyler. int sayac = 0; foreach (Match find in reg.Matches(richTextBox1.Text)) { richTextBox1.Select(find.Index, find.Length); richTextBox1.SelectionBackColor = Color.Yellow; // Bulunan kelimenin arkaplan rengini değiştirdik. sayac++; } if (sayac == 0) { // sayaç değişkeni hiç değişmedi ise aradığımız kelime bulunamamıştır. MessageBox.Show("Metin içerisinde ( " + kelime + " ) bulunamadı."); } else { MessageBox.Show("Metin içerisinde ( " + kelime + " ) "+ sayac + " adet bulundu."); } }
Kodları açıklamak gerekirse;
- İlk olarka önceki aramadan yapılan işaretlemeleri temizliyoruz.
- AramaYap formumuzu açıyoruz.
- Formu showdialog() ile açtığımız için kodlar o noktada bekliyor. Form açıldıktan sonra arama yapılacak kelimeyi giriyoruz ve form kapanıyor. Form kapandıktan sonra kodlar kaldığı yerden devam ediyor. Bu sayede, AramaYap formunda modifiers özelliği Public olan textbox’umuzdan direk olarak veriyi alabiliyoruz.
- Burada, AramaYap formunda bul string’ine değer ataması yaptık ama kullanmadık. Dilerseniz silebilirsiniz. Çünkü değeri direk textbox’tan aldık.
- Büyük Küçük harf eşleştirmesi yapabilmek için Regex sınıfı kullanıyoruz.
- Eğer, Regex sınıfı kullanırken, RegexOptions.IgnoreCase özelliğini kullanmazsak birebir eşleşme arar. RegexOptions.IgnoreCase özelliği büyük küçük harf eşleşmesine bakılmamasını istediğimizi belirtir.
- Daha sonra yine Regex sınıfının Matches metodu ile for each döngüsü kullanarak eşleşmeleri arıyoruz. Buraya dikkat burada kelimeleri eşleşme ile arıyoruz.
- Bulunan kelimenin, ilk karakterinin index’inden başlayarak, uzunluğu kadar kadar olan kısmını seçiyoruz.
- Seçilen parçanın arkaplan rengini sarı renk yapıyoruz.
- Ayrıca kullandığımız sayaç değişkenini daha sonra kullanmak için bulunan kelime kadar arttırıyoruz.
- Sayaç değişkeni eğer 0 ise hiçbir kelime bulunanamıştır. Bu sayede kullanıcıya bir eşleşme bulunamadığına dair mesaj veriyoruz.
- Sayaç değişkeni 0 değilse eşleşme bulunmuştur. Bu sayede kullanıcıya aradığı kelimenin, metin içerisinde kaç yerde geçtiğini söyleyebiliyoruz.
Aşağıda büyük küçük eşleşme olmadan yapılan bir aramanın ekran görüntüsü görebilirsiniz.
Burada, büyük küçük eşleşmesine bakmadığımız için tüm “lorem” kelimeleri bulundu.
Aşağıda büyük küçük eşleşme istenerek yapılan bir aramanın ekran görüntüsü görebilirsiniz.
Gördüğünüz gibi, büyük küçük eşleşmesi istediğimizde küçük harfle başlayan bir kelime işaretlenmedi.
C# RichTextBox İçinde Arama Yapmak dersimizde bu kadardı arkadaşlar. Diğer derslerimizde görüşmek üzere….
C Sharp Eğitim Seti eğitimi sayfasına gitmek için tıklayınız.
Derslerime özel olarak hazırladığım Github Projeme buradan ulaşabilirsiniz…
Sağlıcakla ve takipte kalın.