如何使用numericUpDown移动到richTextBox中的特定位置文本?

时间:2016-06-21 18:16:42

标签: c# .net winforms

在listView选择的索引中,我选择项目并在richTextBox中显示文件内容:

void lvnf_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (ListViewCostumControl.lvnf.SelectedItems.Count > 0)
            {
                richTextBox1.Text = File.ReadAllText(ListViewCostumControl.lvnf.Items[ListViewCostumControl.lvnf.SelectedIndices[0]].Text);

                int resultsnumber = 0;
                int start = richTextBox1.SelectionStart;
                int startIndex = 0;
                int index = 0;
                string word = textBox1.Text;
                Color selectionColor = richTextBox1.SelectionColor;
                word = textBox1.Text.Replace("\r\n", "\n");

                while ((index = richTextBox1.Text.IndexOf(word, startIndex)) != -1)
                {
                    richTextBox1.Select(index, word.Length);
                    richTextBox1.SelectionColor = Color.Yellow;
                    startIndex = index + word.Length;
                    resultsnumber ++;
                }

                richTextBox1.SelectionStart = start;
                richTextBox1.SelectionLength = 0;
                richTextBox1.SelectionColor = selectionColor;

                label16.Text = resultsnumber.ToString();
                label16.Visible = true;
                numericUpDown1.Maximum = resultsnumber;
                numericUpDown1.Enabled = true;
            }
        }

我有numericUpDown changedvalue事件

private void numericUpDown1_ValueChanged(object sender, EventArgs e)
        {

        }

例如,如果我在numericUpDown中有4的最大值,则4会产生richTextBox文本。

每个结果都在文本的另一个位置。 我想要做的是当我向上移动numericUpDown时,它会将richTextBox跳转到文本中的结果位置。

我认为应该是如果第一个结果在索引0中开始并在索引20中结束,那么跳转到此结果会显示此结果。

如果第三个结果在索引76中开始并在索引83中结束,那么如果我在numericUpDown中选择了值3,则跳转到此结果位置。

好的,这就是我现在所做的很容易,但我在重置变量时遇到了问题:

这很容易做到,但是每次在listView中选择另一个项目时我都会重置变量。我想重置List,并在选择其他项目时将numericUpDown1设置为值0。但是,在将项目添加到List并抛出异常之前,它会转到numericUpDown1_ValueChanged项目,因为List Count和numericUpDown1值为0.

在form1的顶部创建了一个新的List

private List<int> results = new List<int>();

在listView selectedindex事件中:

void lvnf_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (ListViewCostumControl.lvnf.SelectedItems.Count > 0)
            {
                richTextBox1.Text = File.ReadAllText(ListViewCostumControl.lvnf.Items[ListViewCostumControl.lvnf.SelectedIndices[0]].Text);

                results = new List<int>();
                numericUpDown1.Value = 0;
                int resultsnumber = 0;
                int start = richTextBox1.SelectionStart;
                int startIndex = 0;
                int index = 0;
                string word = textBox1.Text;
                Color selectionColor = richTextBox1.SelectionColor;
                word = textBox1.Text.Replace("\r\n", "\n");

                while ((index = richTextBox1.Text.IndexOf(word, startIndex)) != -1)
                {
                    richTextBox1.Select(index, word.Length);
                    richTextBox1.SelectionColor = Color.Yellow;
                    startIndex = index + word.Length;
                    resultsnumber ++;
                    results.Add(startIndex);
                }

                richTextBox1.SelectionStart = start;
                richTextBox1.SelectionLength = 0;
                richTextBox1.SelectionColor = selectionColor;

                label16.Text = resultsnumber.ToString();
                label16.Visible = true;
                numericUpDown1.Maximum = results.Count -1;
                numericUpDown1.Enabled = true;

                richTextBox1.SelectionStart = results[(int)numericUpDown1.Value];
                richTextBox1.ScrollToCaret();
            }
        }

在numericupdown1 valuechanged事件

private void numericUpDown1_ValueChanged(object sender, EventArgs e)
        {
            if (results.Count == 0)
            {
                MessageBox.Show("Results Count Value is 0 Check It !!!!!");
            }
            else
            {
                richTextBox1.SelectionStart = results[(int)numericUpDown1.Value];
                richTextBox1.ScrollToCaret();
            }
        }

当在列表中选择第一项时,它很好。 但是当我选择任何其他项目时,我希望结果List和numericUpDown将重置为空和0。

问题是当我将numericUpDown1值设置为0时,它会在将结果添加到List之前跳转到valuechanged事件,因此它会给出异常。

0 个答案:

没有答案