在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事件,因此它会给出异常。