我有一个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];
}
它给了我想要的结果,但是涉及在整个框中循环遍历每个角色,这只是伤害。有一种简单的方法可以做到这一点我只是缺席了吗?感谢。
答案 0 :(得分:1)
您是否尝试过使用line.split?不确定这是不是你想要的。
答案 1 :(得分:1)
这可能会为你做到这一点
"General Error"
在第一种方法中,我们按字符public partial class Form1 : Form
{
//some method ...
try
{
FolderInfo newFolder = CommonCreative.CreateFolder(textFolderName.Text);
}
catch (Exception ex)
{
textBoxResult.Parent.Invoke((MethodInvoker)delegate
{
textBoxResult.AppendText("General Error");
textBoxResult.AppendText(Environment.NewLine);
});
}
//...
public void update(string message)
{
textBoxResult.Parent.Invoke((MethodInvoker)delegate
{
textBoxResult.AppendText(message);
textBoxResult.AppendText(Environment.NewLine);
});
}
}
public static class CommonCreative
{
public static FolderInfo CreateFolder(string foldername)
{
try
{
//
return folder;
}
catch (Exception ex)
{
// Failed - return null
error = ex.Message;
Form1._Form1.update("Error from the CommonCreative class");
return null;
}
}
}
拆分行,而不是查找是否有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
之前和之后的字符,然后拆分字符串。我认为第二个对我来说似乎更好。
答案 2 :(得分:0)
使用\n
存储indexOf
的位置,如果&gt; = 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));