TextBox icinde arama yapma ve secili hale getirme

Başlatan empax, 21 Aralık 2011 - 22:54:49

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

empax

VisualBasic ile textBox icinde arama yaptirip bulunan tum benzer kelimeleri secili hale getirmeye calisiyorum ama beceremedim. Yardim ederseniz sevinirim.  :)

Soyle bir deneme yaptim:
For Each AradigimKelime In TextBox3.Text //Foreach te pek iyi degilim yanlis olabilir.
                    TextBox3.Focus()
                    TextBox3.Select(X, AradigimKelime.Length) //X yazan yere sanirim aranilan kelimenin baslangic noktasini yazacagim ama nasil?
                Next


Ayrica For Each icine IF TextBox3.Text.Contains(AradigimKelim) seklinde kosul eklemem gerekir mi?
بسم الله الرحمن الرحيم
|ACEMİLER İÇİN İLK DURAK|Çözüldü|Kod etiketi|

sem

String işlemleri ile ilgili sınıfın işlevlerini inceleyiniz... find gibi bir işlev olmalı. Bu işlevleriden birisi size X değerinizi veriyor olacaktır zaten...

IF ifadesini eklemek ise yararınıza olur... Aksi halde aradığınız kelime yoksa dahi son duruma getirecek olduğunuz for each ifadesi çalıştırılacaktır...


Not: String sınıfı size bulduğu ilk alt stringin indexini döndürüyor olabilir... Eğer daha sonraileri kendiniz bulmanız gerekirse yani string sınıfı içsel olarakbunları barındırmıyorsa; daha sonra arayacağınız AradadigimKelime değişkenini TextBox3.Text[AradadigimKelimeLength] kadar sonra aramanız gerekir... Yoksa bir tane bulduğunuz takdirde sonsuz döngüye girebilir program =)
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?

empax

Alıntı yapılan: sem0900 - 21 Aralık 2011 - 23:02:39
String işlemleri ile ilgili sınıfın işlevlerini inceleyiniz... find gibi bir işlev olmalı. Bu işlevleriden birisi size X değerinizi veriyor olacaktır zaten...
2 saattir arastiriyorum ama yukaridaki koddan fazla ileriye gidemedim.  :(

Alıntı Yap
IF ifadesini eklemek ise yararınıza olur... Aksi halde aradığınız kelime yoksa dahi son duruma getirecek olduğunuz for each ifadesi çalıştırılacaktır...

Yukaridaki kod parcasi kosul saglaniyorsa calisyor. Yani TextBox icinde aranilan kelime varsa calisiyor. Yinede gerek var mi ?

Tesekkurler.
بسم الله الرحمن الرحيم
|ACEMİLER İÇİN İLK DURAK|Çözüldü|Kod etiketi|

sem

VisualBasic için en iyi dökümantasyon msdn olacaktır sanırım...

http://msdn.microsoft.com/en-us/library/ms172836.aspx

Bu makaleyi incelediniz mi?

Bu arada bir string içerisinde arama işlemi için

InStr işlevini kullanmanız gerekiyormuş...

http://gokhanca.com/visualbasic-makale/70-visual-basic-string-fonksiyonlar.html

Adresinde örnek mevcut...

Kolay gelsin.. =)
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?

empax

                For Each ArananKelime In TextBox3.Text
                    TextBox3.Select(TextBox3.Text.IndexOf(ArananKelime), ArananKelime.Length)
                    TextBox3.Focus()
                Next


Simdi secili hale getirebiliyorum ancak sadece ilk bulunan kelimeyi, tum bulunan kelimeleri secili hale getirebilir miyiz ?
بسم الله الرحمن الرحيم
|ACEMİLER İÇİN İLK DURAK|Çözüldü|Kod etiketi|

sem

For each'i biraz araştırmak gerekecek sanırım.. Örneğin ben yanlış görmüyorsam siz zaten ArananKelime olaral TextBox3.Text strign'i içerisindeki tüm kelimeleri teker teker ArananKelime'ye atıyorsunuz? Yanlış mı görüyorum... Sizin ihtiyacınız olan InStr gibi bir fonksiyon...

* ArananKelime'yi ilgili String dizisi içerisinde ara...
* Index'ini al ayrıca ve TextBox3.Select(BulunanIndex, ArananKelime.Length)

* Aramaya index'ten itibaren devam et. Taki arama sonucu 0 olana kadar bu işleme devam et...
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?

empax

Galiba evet, for each dongusunu yanlis kullaniyorum, eksigim var o noktada.

InStr ve IndexOf ayni degeri donduruyor, alttaki orneklere bakabilirsiniz.

Her iki ornekte, aranan string arama yapilan string icerisinde yoksa -1, varsa baslangic noktasini donduruyor.
-InStr(Kaçıncı karakterden itibaren,Nerde aranacak,Ne aranacak)
-TextBox1.Text.IndexOf(Ne aranacak,Kaçıncı karakterden itibaren,Kaç karakter)

Sanirim atladigim bir nokta var o da TextBox'un coklu secmeyi(multi select) desteklememesi(?)
Yardimin icin cok tesekkurler @sem0900, sanirim bundan daha fazlasini yapamayacagiz  :)
بسم الله الرحمن الرحيم
|ACEMİLER İÇİN İLK DURAK|Çözüldü|Kod etiketi|