okienko reaguje za drugim razem

0

witam

robie proste wyszukiwanie tekstu
http://img32.yfrog.com/img32/9477/goale.jpg

do duzego okna laduje tresc (np. z pliku)
w malym wpisuje to co chce szukac
klikam "znajdz nastepny" i nic..
klikam ponownie i dziala (znaleziony tekst zostaje podswietlony w duzym okienku)

i tak za kazdym razem
duze okienko reaguje zawsze za drugim kliknieciem

ciekawe, ze jesli probuje wyszukac tekst, ktorego nie ma i klikne "znajdz nastepny" wyskakuje okienko "nie znaleziono", czyli wszystko tak jak powinno

ponizej zamieszczam oba pliki

Form1.cs

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 _002_wyszukiwanie_tekstu
{
    public partial class Form1 : Form
    {
        public Form2 szukaj;
        public static bool closed = true;
        public string szukany;

        public Form1()
        {
            InitializeComponent();
        }

        //szukaj
        private void button1_Click(object sender, EventArgs e)
        {
            if (closed)
            {
                closed = false;
                szukaj = new Form2(this);
                szukaj.Owner = this;
                szukaj.Show();
            }
            else
                szukaj.Activate();
        }

        public string getText()
        {
            return richTextBox1.Text;
        }

        public void koloruj(int start, int length)
        {
            //if (richTextBox1.SelectedText.Equals(""))

                richTextBox1.SelectionBackColor = Color.Turquoise;
                richTextBox1.Select(start, length);


            
            //MessageBox.Show(richTextBox1.SelectedText, a.ToString());
            
                


        }

        //wczytaj tekst z pliku
        private void richTextBox1_MouseDoubleClick(object sender, MouseEventArgs e)
        {
            openFileDialog1 = new OpenFileDialog();
            openFileDialog1.DefaultExt = "txt";
            openFileDialog1.Filter = "Pliki tekstowe (*.txt)|*.txt|Wszystkie pliki (*.*)|*.*";
            openFileDialog1.ShowDialog();

            string filename = openFileDialog1.FileName.ToString();

            //otwieranie pliku
            if (File.Exists(filename))
            {
                FileStream fs = new FileStream(filename, FileMode.Open, FileAccess.Read);
                StreamReader reader = new StreamReader(fs);

                richTextBox1.Text = reader.ReadToEnd();

                reader.Close();
            }
        }

        //pomocniczy klawisz
        private void button2_Click(object sender, EventArgs e)
        {
            richTextBox1.SelectionBackColor = Color.Aqua;
            richTextBox1.Select(5, 10);
        }
    }

    
}

Form2.cs

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 _002_wyszukiwanie_tekstu
{
    public partial class Form2 : Form
    {
        public Form1 glowne;

        public Form2(Form1 gl)
        {
            InitializeComponent();
            glowne = gl;
            this.AcceptButton = button1;
        }

        //zamknij
        private void button2_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        //znajdź następny
        private void button1_Click(object sender, EventArgs e)
        {
            string t = textBox1.Text;
            int first;

            //uwzglednianie wielkosci liter
            if(checkBox1.Checked)
                first = glowne.getText().IndexOf(t);
            else
                first = glowne.getText().ToLower().IndexOf(t);

            

            //czy znaleziono wystąpienia
            if (first > 0) 
                glowne.koloruj(first, t.Length);
            else
                MessageBox.Show("Nie znaleziono szukanego wyrazu", "Niestety");
        }

        private void Form2_FormClosed(object sender, FormClosedEventArgs e)
        {
            Form1.closed = true;
        }
    }
}
0

1 propozycja jest taka, że okno Form1 jest niezaznaczone, dlatego przy pierwszym kliknięciu ustawia się kursor, a drugie kliknięcie dopiero uruchamia kolorowanie, druga rzecz,
gdy ktoś zaznacza, że wielkość znaków nie ma znaczenia to szukany string "t" też musisz zmniejszyć, tj:
first = glowne.getText().ToLower().IndexOf(t); - coś takiego nie zadziała zawsze;
first = glowne.getText().ToLower().IndexOf(t.ToLower()); owszem

0

Zmień kolejność w metodzie koloruj na:

public void koloruj(int start, int length)
{
     richTextBox1.Select(start, length);
     richTextBox1.SelectionBackColor = Color.Turquoise;
}

Pzdr.

0

dzięki Daron, działa

i dzięki za wytknięcie drugiego trima

1

Albo źle rozymiem twój kod, albo przy porównywaniu bez rozróżeniania wielkości liter tworzysz sobie zupełnie nowy string cały z małych liter. Proponuję przetestować rozwiązanie na dużym pliku :D . Użyj lepiej jednej z przeciążonych wersji Compare z parametrem IgnoreCase.

1 użytkowników online, w tym zalogowanych: 0, gości: 1