none
arama yapıyor ama bulup bulmadığını anlayamıyorum.... RRS feed

  • Soru

  • arama yapan bir method var ve arama yaptığımda o karakterin veya kelimenin cümlenin neyse nasıl arkasını boyatabilrim ve hiçbir şey bulamadığında uyarı verdirebilirim?

    bunun için methoda nasıl bir kontrol yapmalıyım teşekkürler...

    METHOD:

    void Snc()
            {
                int sonuc = Occurs(araTSTB.Text, tbMetin.Text);
            }
    
            private static int Occurs(string search, string exp)
            {
                int occurs = 0, current = -1;
                do
                {
                    current = exp.IndexOf(search, current + 1);
                    if (current >= 0)
                    {
                        occurs++;
                    }
                } while (current >= 0);
                return occurs;
            }
    
            #endregion
    



    1881 -
    18 Aralık 2011 Pazar 21:43

Yanıtlar

  • Merhabalar,

     

    Kodunuzu asagidaki sekilde duzenleyip deneyebilir misiniz?

     

    Bende bir sorun olusturmuyor.

           string orijinaltext = "";
           void Snc()
            {
               //textbox i temizlemek icin.
                if (orijinaltext == "")
                {
                    orijinaltext = richTextBox1.Text;
                }
                richTextBox1.Text = orijinaltext;
                if (string.IsNullOrEmpty(textBox1.Text))
                {
                    MessageBox.Show("Metin Bulunamadi");
                }
                else
                {
                    int sonuc = Occurs(textBox1.Text, richTextBox1.Text);
                    if (sonuc == 0)
                    {
                        MessageBox.Show("Metin Bulunamadi");
                    }
                    else
                    {
                        Isaretle(textBox1.Text);
                    }
                }
            }
    
            private static int Occurs(string search, string exp)
            {
                int occurs = 0, current = -1;
                do
                {
                    current = exp.IndexOf(search, current + 1);
                    if (current >= 0)
                    {
                        occurs++;
                    }
                }
                while (current >= 0);
                return occurs;
            }
            private void Isaretle(string arananMetin)
            {
                int index = -1;
                do
                {
                    index = richTextBox1.Find(arananMetin, index + 1, RichTextBoxFinds.None);
                    richTextBox1.SelectionBackColor = Color.Lime;
       
                }
                while (index >= 0);
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                Snc();
            }
    


    • Yanıt Olarak İşaretleyen Gürsel Çetin 20 Aralık 2011 Salı 10:18
    19 Aralık 2011 Pazartesi 22:15
    Moderatör
  • Merhabalar,

    Aşağıdaki kod içerisinde sonuc değerini bir label'a atayabilirsiniz.

    void Snc()
            {
    lblSonuc.Text="Kayıt Bulunamadı.";
               //textbox i temizlemek icin.
                if (orijinaltext == "")
                {
                    orijinaltext = richTextBox1.Text;
                }
                richTextBox1.Text = orijinaltext;
                if (string.IsNullOrEmpty(textBox1.Text))
                {
                    MessageBox.Show("Metin Bulunamadi");
                }
                else
                {
                    int sonuc = Occurs(textBox1.Text, richTextBox1.Text);
                    if (sonuc == 0)
                    {
                        MessageBox.Show("Metin Bulunamadi");
                    }
                    else
                    {
    lblSonuc.Text= sonuc.ToString() + " kayIt bulundu.";
                        Isaretle(textBox1.Text);
                    }
                }
            }
    


    • Yanıt Olarak İşaretleyen Gürsel Çetin 20 Aralık 2011 Salı 10:18
    20 Aralık 2011 Salı 04:49
    Moderatör

Tüm Yanıtlar

  • Merhabalar,

    Metin bulunamadığı zaman hata vermek için 

    if(sonuc==0){MessageBox.Show("Metin Bulunamadi");} komutunu kullanabilirsiniz.

    Aranan sonuclari textbox ta gostermek maalesef mumkun degil cunku textbox sadece tek bir selection tasiyabiliyor ancak, textbox yerine richtextbox kullanirsaniz asagidaki sonksiyonu cagirarak metinlerin isaretlenmesini saglayabilirsiniz.

            private void Isaretle(string arananMetin)
            {
                int index = 0;
                while (index >= 0)
                {
    
                    index = richTextBox1.Find(arananMetin, index, RichTextBoxFinds.None);
                    richTextBox1.SelectionColor = Color.Red;
                    if (index >= 0)
                    {
                        index++;
                    }
                }
            }
    

    tbMetin isimli kontrolunuzun tipini textbox tan ricktextbox a cevirirseniz yukaridaki kodda richTextBox1 yazan terlere tbMetin yazmaniz gerekecektir. Metodu cagirma sekliniz ise Isaretle(araTSTB.Text) seklinde olmalidir.

    18 Aralık 2011 Pazar 22:06
    Moderatör
  • peki ben bunu nasıl kullanıcam? Occurs methodunun içinde mi kullanıcam? neyaomam lazım tam olarak anlayamadım? zaten bu ara olayı hepten kafamı karıştırdı...hata mesajı için sonuc==0 demişsiniz o sonuc nerden geliyor eğer void Snc() den geliyorsa gördüğünüz gib o vid içine ulaşamıyorum ona static de yazmıyorum diğer buton vs ne varsa hepsini etkiliyor çalıştırmıyor denedim çünkü....public de yazamıyorum çok enteresan bir method bu :D class dahi yapammıyorum bir sürü işin içinden çıkılamıyacak bir hal alıyor o yüzden siz daha ayrıntılı bir şekilde tarif ederseniz daha iyi anlarım umarım :)) teşekkürler...

     


    1881 -
    18 Aralık 2011 Pazar 22:32
  • Asagidaki gibi deneyebilirsiniz. Ancak dedigim gibi tbMetin'in richtextbox olmasi gerekiyor textbox degil Toolboxtan richtextbox i formunuza ekleyebilirsiniz.

     

    void Snc()
            {
                int sonuc = Occurs(araTSTB.Text, tbMetin.Text);
    if(sonuc==0){MessageBox.Show("Metin Bulunamadi"); } 
    
    Isaretle(araTSTB.Text);
            }
    
            private static int Occurs(string search, string exp)
            {
                int occurs = 0, current = -1;
                do
                {
                    current = exp.IndexOf(search, current + 1);
                    if (current >= 0)
                    {
                        occurs++;
                    }
                } while (current >= 0);
                return occurs;
            }
          private void Isaretle(string arananMetin)
            {
                int index = 0;
                while (index >= 0)
                {
    
                    index = tbMetin.Find(arananMetin, index, RichTextBoxFinds.None);
                    tbMetin.SelectionColor = Color.Red;
                    if (index >= 0)
                    {
                        index++;
                    }
                }
            }
    


     

    18 Aralık 2011 Pazar 22:37
    Moderatör
  • editörler ne kadar sabırsız yaa :D...oyun mu oynuyoruz burada? bişi öğrenmeye çalışıyoruz herhalde...neyse...

    Tamer Bey;

    maalesef yine işaretleme yapmıyor...

    bir de önemli bir kaç sorum olacak...(bu sizin konunuzla alakalı değil aslında ama)...

    burada bulunan arama olayı acaba aynı olan her kelimenin arkasını mı çizecek yoksa ilk bulduğu kelimenin arkasını mı çizecek?maalesef onu anlmış değilim tam olarak eğere sadece o kelimeden kaç tane olursa lsun ilk kelimeyi çizecekse kullanıcı için bu çok ciddi bir sıkıntı...benim istediğim aynı bulduğu her kelimenin veya karakterin veya cümlenin arkasını çizmesi? bunun için ne yapmalıyım?teşekkürler...


    1881 -
    19 Aralık 2011 Pazartesi 21:04
  • Merhabalar,

    Her bulduğu kelimenin arkasını çizmesi gerekiyor. Örnek bir kodu ben test ettiğimde çalışmıştı.

    Kod çalıştığında sonuç ne oluyor? Kelime bulamadığında uyarı veriyor mu? kodunuzu paylaşabilir misiniz, bir de daha önce söyledim ama atlamış olma ihtimaline karşı tekrar sorayım tbMetin textbox değil de richtextbox değil mi? yoksa çalışmaz.

    Ek : kelimenin arkasını boyamak istiyorsanız SelectionColor yerine  SelectionBackColor a değer atamayı deneyin.
    19 Aralık 2011 Pazartesi 21:09
    Moderatör
  • 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;
    
    namespace KacKarakter
    {
        public partial class KarakterForm : Form
        {
            public KarakterForm()
            {
                InitializeComponent();
                this.rtbMetin.Click += new EventHandler(rtbMetin_Click);
                this.rtbMetin.KeyDown += new KeyEventHandler(rtbMetin_KeyDown);
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
    
            }
    
            #region MTH_Hesapla
    
            public void KrkBul()
            {
                if (rtbMetin.Text.Length >= 1000000000)
                {
                    ksTSSL.Text = rtbMetin.Text.Length.ToString("N") + " + " + " dan fazla karakter içeriyor.";
                }
                else
                {
                    ksTSSL.Text = "Karakter: " + rtbMetin.Text.Length.ToString();
                }
            }
    
            public void SatirSutunBul()
            {
                int satir = rtbMetin.GetLineFromCharIndex(rtbMetin.SelectionStart);
                int sutun = rtbMetin.SelectionStart - rtbMetin.GetFirstCharIndexFromLine(satir);
                stTSSL.Text = "Satır: " + (satir + 1) + " Sütun: " + (sutun + 1);
            }
    
            #endregion
    
            #region MTH_Temizle
    
            public void Temizle()
            {
                if (DialogResult.Yes == MessageBox.Show("Tüm içerik temizlenecek, emin misiniz?", "Uyarı!", MessageBoxButtons.YesNo))
                {
                    if (rtbMetin.Text.Length <= 0)
                    {
                        ksTSSL.Text = rtbMetin.Text.Length.ToString();
                    }
                    else
                    {
                        rtbMetin.Text = "";
                        stTSSL.Text = "";
                        ksTSSL.Text = "";
                        araTSTB.Text = "";
                        sncTSSL.Text = "";
                    }
                }
            }
    
            #endregion
    
            #region MTH_Ara
    
            void Snc()
            {
                int sonuc = Occurs(araTSTB.Text, rtbMetin.Text);
                if (sonuc == 0)
                {
                    MessageBox.Show("Metin Bulunamadi");
                }
                Isaretle(araTSTB.Text);
            }
    
            private static int Occurs(string search, string exp)
            {
                int occurs = 0, current = -1;
                do
                {
                    current = exp.IndexOf(search, current + 1);
                    if (current >= 0)
                    {
                        occurs++;
                    }
                }
                while (current >= 0);
                return occurs;
            }
            private void Isaretle(string arananMetin)
            {
                int index = 0;
                while (index >= 0)
                {
                    index = rtbMetin.Find(arananMetin, index, RichTextBoxFinds.None);
                    rtbMetin.SelectionBackColor = Color.Lime;
                    if (index >= 0)
                    {
                        index++;
                    }
                }
            }
    
            #endregion
    
            #region ButonGorevleri
    
            private void hkkTSMI_Click(object sender, EventArgs e)
            {
                this.WindowState = FormWindowState.Minimized;
                HakkindaForm hf = new HakkindaForm();
                hf.ShowDialog();
            }
    
            private void rtbMetin_Click(object sender, EventArgs e)
            {
                SatirSutunBul();
            }
    
            private void araTSMI_Click(object sender, EventArgs e)
            {
                Occurs(araTSTB.Text, rtbMetin.Text);
            }
    
            private void rtbMetin_KeyDown(object sender, KeyEventArgs e)
            {
                if (e.KeyData == Keys.Up || e.KeyData == Keys.Down || e.KeyData == Keys.Left || e.KeyData == Keys.Right)
                {
                    SatirSutunBul();
                }
            }
    
            private void kkTSSL_Click(object sender, EventArgs e)
            {
                KrkBul();
            }
    
            private void tzTSSL_Click(object sender, EventArgs e)
            {
                Temizle();
            }
    
            private void doTSMI_Click(object sender, EventArgs e)
            {
    
            }
    
            private void dyTSMI_Click(object sender, EventArgs e)
            {
    
            }
    
            private void dacTSMI_Click(object sender, EventArgs e)
            {
                AcOkuYaz.Ac();
            }
    
            #endregion
    
        }
    }
    
    

    maalesef Tamer bey ne arkasını çiziyor ne imleç oraya gidiyor ne de uyarı veriyor :( dediğiniz gibi richTextBox....ayrıca benim kastettiğim de her kelimenin yani o kelimeden kaçtane bulduysa ulduğu kelimenlerin hepsinin arkasını aynı anda çizmesiydi...sizce de mantıklı olan bu değil mi?teşekkürler...lütfen bu iş için en mantıklı durum neyse onu söyleyin o yolu izleyeyim...tekrar teşekkürler...
    1881 -
    19 Aralık 2011 Pazartesi 21:29
  • Siz sanirim snc fonksiyonunu cagirmiyorsunuz. araTSMI_Click icerisinden snc fonksiyonunu Snc() seklinde cagirip dener misiniz 
    19 Aralık 2011 Pazartesi 21:33
    Moderatör
  • evet şimdi şöyle bişi oluyor bir kere boş arama yaptığında

    Index was out of range. Must be non-negative and less than the size of the collection.
    Parameter name: startIndex

    current = exp.IndexOf(search, current + 1);
    


    bu satırda bu hatayı veriyor halbu ki boş arandığında da kelime bulunamadı çıkması gerekirdi...

    diğer sorun ise kelimeyi yazıp Ara buyonuna bastığımda önce Metin Bulunamadı sonra da o kelimenin arkasını mavi renk boyuyor oysa ki ben SelectionBackColor=Color.Lime; yazmıştım ki neyse (renk çok önemli değil en son iş o)...teşekkürler...


    1881 -
    19 Aralık 2011 Pazartesi 21:48
  • Merhabalar,

     

    Kodunuzu asagidaki sekilde duzenleyip deneyebilir misiniz?

     

    Bende bir sorun olusturmuyor.

           string orijinaltext = "";
           void Snc()
            {
               //textbox i temizlemek icin.
                if (orijinaltext == "")
                {
                    orijinaltext = richTextBox1.Text;
                }
                richTextBox1.Text = orijinaltext;
                if (string.IsNullOrEmpty(textBox1.Text))
                {
                    MessageBox.Show("Metin Bulunamadi");
                }
                else
                {
                    int sonuc = Occurs(textBox1.Text, richTextBox1.Text);
                    if (sonuc == 0)
                    {
                        MessageBox.Show("Metin Bulunamadi");
                    }
                    else
                    {
                        Isaretle(textBox1.Text);
                    }
                }
            }
    
            private static int Occurs(string search, string exp)
            {
                int occurs = 0, current = -1;
                do
                {
                    current = exp.IndexOf(search, current + 1);
                    if (current >= 0)
                    {
                        occurs++;
                    }
                }
                while (current >= 0);
                return occurs;
            }
            private void Isaretle(string arananMetin)
            {
                int index = -1;
                do
                {
                    index = richTextBox1.Find(arananMetin, index + 1, RichTextBoxFinds.None);
                    richTextBox1.SelectionBackColor = Color.Lime;
       
                }
                while (index >= 0);
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                Snc();
            }
    


    • Yanıt Olarak İşaretleyen Gürsel Çetin 20 Aralık 2011 Salı 10:18
    19 Aralık 2011 Pazartesi 22:15
    Moderatör
  • Formun ekran görüntüsü:

    using System;
    using System.Drawing;
    using System.Windows.Forms;
    
    namespace richtextkelime_bulma
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private void bul_Click(object sender, EventArgs e)
            {
                int kacIfadeVar = 0;
                metinBelgesi.Select(0, metinBelgesi.Text.Length);
                metinBelgesi.SelectionBackColor = Color.White;
                if (metinBelgesi.Text != null && arama.Text != "" && arama.Text != " ")
                {
    
                    for (int sec = metinBelgesi.Text.ToLower().IndexOf(arama.Text.Trim().ToLower()); sec >= 0; )
                    {
                        kacIfadeVar += 1;
                        metinBelgesi.Select(sec, arama.Text.Trim().Length);
                        metinBelgesi.SelectionBackColor = Color.Yellow;
                        sec = metinBelgesi.Text.ToLower().IndexOf(arama.Text.Trim().ToLower(), sec + 1);
                    }
                }
    
                if (kacIfadeVar !=0)
                sonuc.Text = kacIfadeVar.ToString() + " Adet İfade Tesbit Edimiştir."; 
                else
                    sonuc.Text = "Metin İçerisinde Aranan İfade Tesbit Edilememiştir..!";
            }
        }
    }
    
    

    19 Aralık 2011 Pazartesi 22:29
    Yanıtlayıcı
  • Tamer bey çok teşekkür ederim sorunsuz çalışıyor...

    Burhan bey size de teşekkür ederim..bişi farkettim sizin örneğinizde olan ve (önemli bir özellik bu bence) bulduğu kelime sayısını yzıyor ya bizm nerede yazırabilirizi Tamer Bey? teşekkürler...(birlikte çalışıyormuşuz gibi oldu ama :D)


    1881 -
    19 Aralık 2011 Pazartesi 23:01
  • Merhabalar,

    Aşağıdaki kod içerisinde sonuc değerini bir label'a atayabilirsiniz.

    void Snc()
            {
    lblSonuc.Text="Kayıt Bulunamadı.";
               //textbox i temizlemek icin.
                if (orijinaltext == "")
                {
                    orijinaltext = richTextBox1.Text;
                }
                richTextBox1.Text = orijinaltext;
                if (string.IsNullOrEmpty(textBox1.Text))
                {
                    MessageBox.Show("Metin Bulunamadi");
                }
                else
                {
                    int sonuc = Occurs(textBox1.Text, richTextBox1.Text);
                    if (sonuc == 0)
                    {
                        MessageBox.Show("Metin Bulunamadi");
                    }
                    else
                    {
    lblSonuc.Text= sonuc.ToString() + " kayIt bulundu.";
                        Isaretle(textBox1.Text);
                    }
                }
            }
    


    • Yanıt Olarak İşaretleyen Gürsel Çetin 20 Aralık 2011 Salı 10:18
    20 Aralık 2011 Salı 04:49
    Moderatör
  • çok teşekkürler...
    1881 -
    20 Aralık 2011 Salı 10:18
  • Merhaba

    Bu işlemi hiçbir kontrol mekanizması ve döngü kullanmadan yapabilirmiyiz ?

    2 Ocak 2016 Cumartesi 18:07