有没有什么办法可以在winforms中排序行richtextbox保存RTF格式?在winforms中排序richtextbox保留RTF格式
var lines = edit.Lines.OrderBy(s => s);
edit.Lines = lines.ToArray();
做得很好,但很明显,失去了任何RTF格式。
我有稍微改变TAW的片段: 1.添加“独特”可能打破的第一行格式化 2.除了“\看齐”的标签也有“\ PARD”
这里是一个段(再次感谢TAW!):
private void cmdSort_Click(object sender, EventArgs e)
{
const string PARD = "\\pard";
var pard = Guid.NewGuid().ToString();
var pos1 = edit.Rtf.IndexOf(PARD, StringComparison.Ordinal) + PARD.Length;
if (pos1 < 0) return;
var header = edit.Rtf.Substring(0, pos1);
var body = edit.Rtf.Substring(pos1);
body = body.Replace("\\pard", pard);
var lines = body.Split(new[] { "\\par" }, StringSplitOptions.None);
var lastFormat = "";
var sb = new StringBuilder();
var rtfLines = new SortedList<string, string>();
foreach (var line in lines)
{
var ln = line.Replace(pard, "\\pard");
var temp = ln.Replace("\r\n", "").Trim();
if (temp.Length > 0 && temp[0] != '\\')
{
rtfLines.Add(temp.Trim(), lastFormat + " " + ln);
}
else
{
var pos2 = temp.IndexOf(' ');
if (pos2 < 0)
{
rtfLines.Add(temp.Trim(), ln);
}
else
{
rtfLines.Add(temp.Substring(pos2).Trim(), ln);
lastFormat = temp.Substring(0, pos2);
}
}
}
foreach (var key in rtfLines.Keys.Where(key => key != "}"))
{
sb.Append(rtfLines[key] + "\\par");
}
edit.Rtf = header + sb;
}
真的看起来像开始,谢谢!如果我可以 - 我没有足够的声望,我检查了这个功能是否有用:( – dedpichto
检查一下,如果它确实对您有用,您可以'接受'它作为答案。要做到这一点,您不需要任何声誉;事实上这样做会让你获益,我想两点。 – TaW