C# richtextbox中的特定内容

C# richtextbox中的特定内容,c#,.net,winforms,C#,.net,Winforms,我想在表单中显示一些粗体和简单的内容,所以我使用richtextbox。我制作了一个扩展名为.rtf的文件。现在我使用Loadfile()函数将该文件加载到richtextbox中。这很有效。但是我想在richtextbox中显示文件的特定内容,比如前五行或者第六行到第十行。那么有什么解决方案吗???您尝试了lines属性吗?它允许设置/获取字符串数组作为RichTextbox内容。这不会保留任何格式,但显示了如何操作Lines数组。它看起来像RichTextBox自私地将所有RTF代码保存在自

我想在表单中显示一些粗体和简单的内容,所以我使用richtextbox。我制作了一个扩展名为.rtf的文件。现在我使用Loadfile()函数将该文件加载到richtextbox中。这很有效。但是我想在richtextbox中显示文件的特定内容,比如前五行或者第六行到第十行。那么有什么解决方案吗???

您尝试了lines属性吗?它允许设置/获取字符串数组作为RichTextbox内容。

这不会保留任何格式,但显示了如何操作Lines数组。它看起来像RichTextBox自私地将所有RTF代码保存在自己的文件中,并且只通过行公开文本:

        var fromStart = new string[richTextBox1.Lines.Length - start];
        Array.Copy(richTextBox1.Lines, start, fromStart, 0, fromStart.Length);
        var lineSet = fromStart.Take(count).ToArray();
        richTextBox1.Lines = lineSet;

start和count被传递到此函数,该函数选择一组行。

使用
ReadAllLines解决方案:

string[] lines = File.ReadAllLines(filename);
int startLine = lines.IndexOf(startMarker);
int endLine = lines.IndexOf(endMarker);
if (startLine == -1 || endLine == -1)
{
    // throw some sort of exception - the markers aren't present
}
string[] section = new string[endLine - startLine - 1];
Array.Copy(lines, startLine + 1, section, 0, section.Length);
richTextBox.Rtf = string.Join("\r\n", section);

使用
ReadAllText
的解决方案:

string text = File.ReadAllText(filename);
int startIndex = text.IndexOf(startMarker);
int endIndex = text.IndexOf(endMarker, startIndex + startMarker.Length);
if (startIndex == -1 || endIndex == -1)
{
    // throw some sort of exception - the markers aren't present
}
richTextBox.Rtf = text.Substring(startIndex + startMarker.Length,
                                 endIndex - startIndex - startMarker.Length);    

这两种方法都假设您在文件的该部分中确实有一个完整的RTF文档——例如,您可能会发现您需要额外的头文本。此外,这两种方法都假定文件是UTF-8格式的。我对RTF格式知之甚少,不知道这是否正确。

这是可能的,只是不太清楚。此代码使用另一个RTB加载文件,并使用剪贴板获取格式化的RTF。请注意,它会破坏剪贴板内容

  using (var helper = new RichTextBox()) {
    helper.LoadFile(@"c:\temp\test.rtf");
    // Copy line #6
    int startRange = helper.GetFirstCharIndexFromLine(5);
    int endRange = helper.GetFirstCharIndexFromLine(6);
    helper.SelectionStart = startRange;
    helper.SelectionLength = endRange - startRange;
    helper.Copy();
  }
  richTextBox1.SelectAll();
  richTextBox1.Paste();

试试ProfK回复。他正在使用Lines属性.Ja,但它没有正确保留格式,正如我在编辑中所说的那样。@sir Jon Skeet在最后一行出现了错误,如--File format is not valid--。此代码仅在文件包含纯文本而不是RTF时才能工作。在这种情况下,它应该指定Text属性,而不是Rtf属性。@nobugz:如果它包含由标记分隔的Rtf,为什么会失败@哈里克里希纳:这表明,正如上一段所解释的,这不是一份完整有效的标记间RTF文件。@Jon Skeet爵士感谢您的帮助。很好的尝试,但我认为这不会是一个被接受的答案。他的要求包括保留格式(我是从他对另一个问题的评论中发现的)。