C#-根据插入符号的位置将RichTextBox行一分为二
本文关键字:RichTextBox 一分为二 位置 插入 符号 C#- | 更新日期: 2023-09-27 18:30:10
我有一个RichTextBox,这里称为box
。
string currentline = box.Lines[box.GetLineFromCharIndex(box.SelectionStart)];
那里的那一行获取插入符号所在的行。它工作得很好。
然而,我需要从中获得两条线索。第一个是直到插入符号的那一行上的所有内容,第二个是它之后那一行的所有内容
例如,如果行是How is you|r day going?
,|
表示插入符号,我将分别得到How is you
和r day going?
。
我写了这个怪物,它起作用:
string allbefore = box.Text.Substring(0, box.SelectionStart);
string allafter = box.Text.Substring(box.SelectionStart, box.Text.Length - box.SelectionStart);
string linebefore = "";
for (int i = 0; i < allbefore.Length; i++)
{
linebefore += allbefore[i];
if (allbefore[i] == ''n')
linebefore = "";
}
string lineafter = "";
for (int i = 0; i < allafter.Length; i++)
{
if (allafter[i] == ''n')
break;
else
lineafter += allafter[i];
}
它给了我想要的结果,但涉及到整个框中的每个字符的循环,这很痛苦。有没有一种简单的方法可以做到这一点,我只是错过了?谢谢
这可能对有用
string currentline = box.Lines[box.GetLineFromCharIndex(box.SelectionStart)];
var listOfStrings = new List<string>();
string[] splitedBox = currentline.Split('|');
foreach(string sp in splitedBox)
{
string[] lineleft = sp.Split(''n');
listOfStrings.Add(lineleft[lineleft.Count() - 1]);
}
在第一种方法中,我们通过字符|
来分割行,而不是找到是否有任何'n
,如果它存在,我们将相应地取值
另一种方法可能是
string box = "How is 'n you|r day 'n going?";
bool alllinesremoved = true;
while(alllinesremoved)
{
if(box.Contains(''n'))
{
if(box.IndexOf(''n') > box.IndexOf('|'))
{
box = box.Remove(box.IndexOf(''n'), (box.Length - box.IndexOf(''n')));
}
else
{
box = box.Remove(0, box.IndexOf(''n') + 1);
}
}
else
{
alllinesremoved = false;
}
}
string[] splitedBox = box.Split('|');
在第二种方法中,我们删除'n
之前和之后的字符,然后拆分字符串。我认为第二个对我来说似乎更好。
您尝试过使用line.split吗?不确定这是否是你想要的。
使用indexOf
存储'n
的位置,如果>=0,即字符串包含它,则使用substring
,否则赋值。
string allbefore = box.Text.Substring(0, box.SelectionStart);
string allafter = box.Text.Substring(box.SelectionStart, box.Text.Length - box.SelectionStart);
int newLinePos = allBefore.lastIndexOf("'n");
string lineBefore = ((newLinePos >= 0) ? (allBefore.substring(newLinePos + 1)) : (allBefore));
newLinePos = allafter.indexOf("'n");
string lineAfter = ((newLinePost >= 0) ? (allAfter.substring(0, newLinePos)) : (allAfter));