Вставить значение в определенную строку по индексу - PullRequest
0 голосов
/ 16 декабря 2018
private void Parse_Click(object sender, EventArgs e)
{
    for (int i = 0; i < keywordRanks.Lines.Length; i++)
    {
        int p = keywordRanks.Lines.Length;
        MessageBox.Show(p.ToString());

        string splitString = keywordRanks.Lines[i];
        string[] s = splitString.Split(':');

        for (int j = 0; j < keywords.Lines.Length; j++)
        {
            string searchString = keywords.Lines[j];

            if (s[0].Equals(searchString))
            {
               richTextBox1.Lines[j] = searchString + ':' + s[1];
            }
        }
    }
}

У меня проблема со вставкой строки в определенную строку.У меня есть 2 многострочных TextBox и один RichTextBox.
Мое приложение будет искать строки от textbox1 до textbox2 построчно, и мне нужно вставить эти совпадающие значения в элемент управления RichTextBox, но в точную позицию индекса, где оннайдено в textbox2.

Если значение, найденное в 5-й строке textbox2, то эту найденную строку необходимо вставить в 5-ю строку RichTextBox.
В некотором смысле мой код не работает.Я много пробовал, но не повезло.Код мне нужно что-то вроде ниже, но он не работает, и возникает исключение IndexOutOfBound.

richTextBox1.Lines[j] = searchString + ':' + s[1];

1 Ответ

0 голосов
/ 16 декабря 2018

Ваш RichTextBox должен содержать все необходимые строки, прежде чем вы сможете установить значение с помощью индекса строки.
Если элемент управления не содержит текста или разрывов строк (\n), строки не определяются и не предпринимаются попыткиустановка определенного значения Line[Index] создаст исключение IndexOutOfRangeException.

Здесь я использую предварительно созданный массив, размер которого определяется числом возможных совпадений (Lines.Length в keywords TextBox).Все найденные совпадения хранятся здесь в исходном положении.Затем массив присваивается свойству RichTextBox.Lines.

Примечание : непосредственное использование и предварительная настройка RichTextBox.Lines не будут иметь эффекта: текст останется пустым.

string[] MatchesFound = new string[keywords.Lines.Length];
foreach (string currentSourceLine in keywordRanks.Lines)
{
    string[] SourceLineValue = currentSourceLine.Split(':');

    var match = keywords.Lines.ToList().FindIndex(s => s.Equals(SourceLineValue[0]));
    if (match > -1)
        MatchesFound[match] = currentSourceLine;
}
richTextBox1.Lines = MatchesFound;

     Source        Matches         Result
  (keywordRanks)  (keywords)    (RichTextBox)
  -------------------------------------------
     aand:1         aand           aand:1
     cnd:5          this one      
     cnds:9         cnds           cnds:9
     fan:2          another one   
     gst:0          cnd            cnd:5
                    fan            fan:2
...