这是代码:
private void richTextBox1_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
if (mouseisup == false)
{
textBox1.Text = "";
int positionToSearch = richTextBox1.GetCharIndexFromPosition(new Point(e.X, e.Y));
richTextBox1.SelectionStart = positionToSearch;
textBox1.Text = richTextBox1.Text.Substring(positionToSearch, 1);
previousChar = positionToSearch;
textBox2.Text = "";
mouseisup = true;//add this statement
}
else
{
currentChar = richTextBox1.GetCharIndexFromPosition(new Point(e.X, e.Y));
if (currentChar > previousChar + 2 || currentChar < previousChar - 2)
{
richTextBox1.SelectionStart = currentChar;
textBox2.Text = richTextBox1.Text.Substring(currentChar, 1);
button1.Enabled = true;
}
mouseisup = false;
}
}
}
private void richTextBox1_MouseUp(object sender, MouseEventArgs e)
{
if (textBox2.Text == "")
{
mouseisup = true;
button1.Enabled = false;
}
}
private void button1_Click(object sender, EventArgs e)
{
button1.Enabled = false;
string[] text = Parse_Text.ParseText(richTextBox1.Text, textBox1.Text, textBox2.Text);
for (int i = 0; i < text.Length; i++)
{
richTextBox2.Text = text[i];
}
}
我为测试创建了一个文本新文本文件并输入了文本文件:
“Daniel&gt;较小&gt;&lt;然后daniel或Daniel依赖于D&gt;但是&lt;&lt;&gt;” 然后在程序中第一次点击是第一个丹尼尔的第一个D,第二个点击是在第二个丹尼尔的第二个D上。
然后在此代码中的parse_text中的新类中:
List<string> parsedText = new List<string>();
string[] entries = null;
int startIndex = text.IndexOf(startTag);
if (startIndex >= 0)
{
int endIndex = text.IndexOf(endTag, startIndex);
startIndex为0但endIndex为0.但是endTag是第二个D,它不应该是索引0。 所以这也是一个问题。
答案 0 :(得分:1)
你的问题是你接受了一个确实会给你第一次出现的角色的IndexOf。 为避免这种情况,请使用角色的位置而不是实际角色。
您已经在该行上提供了该信息:
currentChar = richTextBox1.GetCharIndexFromPosition(new Point(e.X, e.Y));
修改强>
您应该更改Parse_Text方法以用于位置而不是字符。 在我的头顶,你应该得到像:
public static string[] ParseText(string text, int startPos, int endPos)
{
List<string> parsedText = new List<string>();
string[] entries = null;
if (startPos >= 0 && endPos > startPos)
{
string images = text.Substring(startPos + 1, endPos - startPos - 1);
entries = images.Split(new[] { ',' });
for (var i = 0; i < entries.Length; i++)
{
entries[i] = entries[i].Replace("\"", "");
}
for (int i = 0; i < entries.Length; i++)
{
parsedText.Add(entries[i]);
}
}
return entries;
}
显然,您应该添加一些关于允许参数的额外测试。 例如: