Событие не начинается впервые - PullRequest
0 голосов
/ 07 апреля 2020

В RichTextBox я пытаюсь вызвать событие с периодом нажатия ('.'), Но оно не работает в первый раз.

Если я напишу "Лорем Ипсум. ", это не работает, но если я напишу " Lorem Ipsum. " или " Lorem Ipsum .. " Это нормально.

PS: я добавил метод KelimeGuncelle и словарь GetWordGroupInstances ().

Вот блок:

private void rtbMakale_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.OemPeriod)
            {
                kelimeGuncelle();
            }
        }

Метод kelimeGuncelle:

void kelimeGuncelle()
        {
            Dictionary<String, int> TekliKelimeGruplari = GetWordGroupInstances(1);
            foreach (var item in TekliKelimeGruplari)
            {
                for (int i = 0; i < lstKelimeler.Items.Count; i++)
                {
                    var kelime = lstKelimeler.Items[i];
                    string guncellenecekKelime = kelime.ToString().Remove(kelime.ToString().IndexOf(" ( ") - 1);
                    string gelenKelime = item.Key;
                    string _guncellenecekKelime = kelime.ToString();

                    int pFrom = _guncellenecekKelime.IndexOf("(") + 1;
                    int pTo = _guncellenecekKelime.LastIndexOf("/");
                    int guncellenecekSayi = Convert.ToInt32(_guncellenecekKelime.Substring(pFrom, pTo - pFrom));

                    int kFrom = _guncellenecekKelime.IndexOf("/") + 1;
                    int kTo = _guncellenecekKelime.LastIndexOf(")");
                    int toplamYazilacakSayi = Convert.ToInt32(_guncellenecekKelime.Substring(kFrom, kTo - kFrom));

                    int kelimeninSirasi = lstKelimeler.Items.IndexOf(kelime);
                    if (Equals(guncellenecekKelime, gelenKelime))
                    {
                        guncellenecekSayi = item.Value;
                        lstKelimeler.Items.RemoveAt(kelimeninSirasi);
                        lstKelimeler.Items.Insert(kelimeninSirasi, guncellenecekKelime + "  ( " + guncellenecekSayi + "/" + toplamYazilacakSayi + " )");
                        //lstKelimeler.Refresh();
                    }

                    if (rtbMakale.Text.Contains(guncellenecekKelime) == false)
                    {
                        lstKelimeler.Items.RemoveAt(kelimeninSirasi);
                        lstKelimeler.Items.Insert(kelimeninSirasi, guncellenecekKelime + "  ( 0/" + toplamYazilacakSayi + " )");
                        //lstKelimeler.Refresh();
                    }
                }
            }
            TekliKelimeGruplari.Clear();
        }

И GetWordGroupInstances:

Dictionary<String, int> GetWordGroupInstances(int GroupSize)
        {

            Dictionary<String, int> WordGroupInstances = new Dictionary<string, int>();

            String[] sourceText = GetSourceText().Split(' ');
            int pointer = 0;
            StringBuilder groupBuilder = new StringBuilder();
            while (pointer < sourceText.Length - GroupSize)
            {
                groupBuilder.Clear();
                int offset = pointer + GroupSize;
                for (int i = pointer; i < offset; i++)
                {
                    groupBuilder.Append(" ").Append(sourceText[i]);
                }

                String key = groupBuilder.ToString().Substring(1);
                if (!WordGroupInstances.ContainsKey(key))
                {
                    WordGroupInstances.Add(key, 1);
                }
                else
                {
                    WordGroupInstances[key]++;
                }

                pointer += 1;
            }

            return WordGroupInstances;

        }

Ответы [ 2 ]

1 голос
/ 07 апреля 2020

попробуйте использовать MessageBox.Show («Тест»); для тестирования может быть что-то в вашем методе kelimeGuncelle () не так.

   private void rtbMakale_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.OemPeriod)
        {
            MessageBox.Show("Test");
        }
    }
0 голосов
/ 07 апреля 2020

Я понял!

В GetWordGroupInstances я изменил время l oop. Здесь:

            while (pointer <= sourceText.Length - GroupSize)
...