我正在尝试将文件加载到windows froms(vs 2010)richTextBox中,但只加载文件的第一行。我正在使用:
// Create an OpenFileDialog to request a file to open.
OpenFileDialog openFile1 = new OpenFileDialog();
// Initialize the OpenFileDialog to look for RTF files.
openFile1.DefaultExt = "*.rtf";
openFile1.Filter = "RTF Files|*.rtf";
// Determine whether the user selected a file from the OpenFileDialog.
if (openFile1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
// Load the contents of the file into the RichTextBox.
rtbTest.LoadFile(openFile1.FileName, RichTextBoxStreamType.PlainText);
}
我尝试使用在word或word pad中创建的rtf文件,并尝试将.cs文件保存为.rtf,但没有成功。
任何帮助表示赞赏。
答案 0 :(得分:3)
好,
看起来整个rtb.LoadFile()事情不适用于你。你可以尝试这样加载文件吗?:
using(var of = new OpenFileDialog())
{
of.DefaultExt="*.rtf";
of.Filter = "RTF Files|*.rtf";
if(of.ShowDialog() == DialogResult.OK)
rtb.Rtf = System.IO.File.ReadAllText(of.FileName);
}
我希望这会有所帮助。
答案 1 :(得分:1)
我认为cs文件不是真正的rtf。尝试将LoadFile
的重载与流类型(如
rtbTest.LoadFile(openFile1.FileName, RichTextBoxStreamType.PlainText);
除此之外,您确定富文本框是否足以显示多于第一行?
修改强>
我试了一下。我在vs2010中使用了windows表单(我认为你使用的是windows表单,但不是100%肯定)。我创建了一个Windows窗体项目并将Project.cs保存为rtf。我在按钮的点击处理程序中添加了一个按钮和一个RichTextBox
我添加了问题中的代码。当我加载Program.rtf时,它实际上引发了异常,因为它的格式不正确。我在RichTextBoxStreamType.PlainText
调用中添加了LoadFile
参数并且它有效。它显示了整个文件。
答案 2 :(得分:1)
您最初是如何保存RTF文件的?我同意Mike Two的观点,该文件中包含的内容并非真正的RTF。
您可以使用Wordpad验证文件是否正确加载,这是我在使用RTF文件时使用的。
<强>更新强>
您可能尝试的一种调查技术如下:将文件加载到RichTextBox后,检查调试器为RichTextBox.Rtf
属性提供的内容 - 您应该看到所有RTF文本,包括格式。如果它确实“全部存在”那么你知道你正在正确地读取文件。
让我担心的是,您正在尝试查看保存为RTF的代码文件。这显然不应该是一个问题,但是,我建议保存一个非常简单的RTF文件,可能只有两行普通文本(想想:lorem ipsum)。如果 加载正常,那么你就会知道你正在阅读的代码文件中的特定内容正在搞砸了。极不可能,但这是一个明显的故障排除策略。
作为最后的手段,请在不同的机器上试用。
答案 3 :(得分:1)
当其他所有方法都失败时,请检查愚蠢的东西......你是否将RichTextBox控件设置为多行?或者是否设置为单线模式?也许您正确加载整个文件,但控件只显示第一行,因为这就是您所说的:)
检查RichTextBox.Multiline
。这是一个远景,但也许?
我创建了一个带有停靠RichTextBox控件的示例项目,保留了所有默认值(Dock = DockStyle.Fill
除外),添加了一个简单的File-&gt; Open菜单,并将您的代码切入菜单处理程序。我必须对您的代码进行的唯一更改是将第二个LoadFile
参数从RichTextBoxStreamType.PlainText
更改为RichTextBoxStreamType.RichText
。
从Word保存的复杂文件(链接,格式,图形等)对我来说很好。
另一个常见问题是控制非常短暂。您可能认为它填满了您的客户区域,但实际上它只是一个狭窄的条带,因此您只能看到一条高线。您是否正确设置了尺寸,对接和/或锚定属性?您是否看到了文档的滚动条?它比你期望的短吗?
答案 4 :(得分:1)
这将有效:
StreamReader sr = new StreamReader(sFileName, Encoding.Default, true);
string sRtfFile = sr.ReadToEnd();
sr.Close();
rtbCombinedFile.Rtf = sRtfFile;
sFileName当然是RTF文件的完整路径。 StreamReader是“System.IO”的一部分。
答案 5 :(得分:1)
只需将文本文件读入字符串并设置RichTextBox的Rtf属性。
如果你不确定你的文本是否包含Rtf文本,你可以使用我写的这个类。它继承自原始的RichTextBox,如果内容不是rtf或格式错误,则会有后备。
public class RichTextBoxEx :RichTextBox
{
public new String Rtf
{
get
{
return base.Rtf;
}
set
{
try
{
// is this rtf?
if (Regex.IsMatch(value, @"^{\\rtf1"))
{
base.Rtf = value;
}
else
{
base.Text = value;
}
}
catch (ArgumentException) // happens if rtf content is corrupt
{
base.Text = value;
}
}
}
}
答案 6 :(得分:0)
我认为问题在于RichTextBoxStreamType,因为你将它设置为PlainText但是你想要在richtextbox控件中加载RichText,所以为什么不使用RichTextBoxStreamType.RichText我尝试了下面的代码并且它正常工作。
// Create an OpenFileDialog to request a file to open.
OpenFileDialog openFile1 = new OpenFileDialog();
// Initialize the OpenFileDialog to look for RTF files.
openFile1.DefaultExt = "*.rtf";
openFile1.Filter = "RTF Files|*.rtf";
// Determine whether the user selected a file from the OpenFileDialog.
if (openFile1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
// Load the contents of the file into the RichTextBox.
richTextBox1.LoadFile(openFile1.FileName, RichTextBoxStreamType.RichText);
}
答案 7 :(得分:0)
不确定它是否与WPF中的WinForms相同,但在WPF中,您必须使用设置为RichTextBox的Document属性的FlowDocument。 这是我必须从WebStream中读取的代码(对于FileStreams可以做同样的事情
protected static FlowDocument LoadRemoteRtf(string path)
{
var doc = new FlowDocument();
if (!string.IsNullOrEmpty(path))
{
var range = new TextRange(doc.ContentStart, doc.ContentEnd);
var downloader = new WebClient();
Stream stream = null;
try
{
stream = downloader.OpenRead(path);
range.Load(stream, DataFormats.Rtf);
}
catch (Exception ex)
{
var props = new Dictionary<string, object> {{"URL", path}};
Logging.WriteLogEntry("Failed to load remote RTF document.", ex, TraceEventType.Information, props);
}
finally
{
if (stream != null)
{
stream.Close();
}
downloader.Dispose();
}
}
return doc;
}
MyRTB.Document = LoadRemoteRtf("http://myserver.com/docs/remote.rtf");
答案 8 :(得分:0)
您也可以尝试将RichTextBox Modifiers属性设置为“public”并查看是否有效,同时检查WordWrap属性是否设置为true,即您正在阅读的文件是否全部写在1行,只是一个长line,即使不行,它仍将根据RichTextBox的大小包装那些长行。
我不知道你是否已经使用它,你试过ReSharper吗?