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 your 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];
}

它给了我想要的结果,但涉及到整个框中的每个字符的循环,这很痛苦。有没有一种简单的方法可以做到这一点,我只是错过了?谢谢

C#-根据插入符号的位置将RichTextBox行一分为二

这可能对有用

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));