编辑:感谢评论我注意到根本原因是将ReadOnly属性设置为true
我正在使用richtextbox创建一个winform(使用类名RICHEDIT50W - 请参阅下面的自定义类)
如果我插入富文本,表格和图片,则会按预期显示。我可以保存RTF内容并加载回来。
但是,如果我将属性readonly设置为true ,则不会显示图像(显示表格和其他丰富内容)。有想过为什么?
我这样做是为了加载RTF数据 myTextBox.ReadOnly = true; myTextBox.RTF = variableConteningRtfData;
我在stackoverflow上找到了我的customrichtextbox实现,可以更好地管理RTF规范。
public class custom_RichTextBox : RichTextBox
{
public custom_RichTextBox() : base()
{
}
[DllImport("kernel32.dll", CharSet = CharSet.Auto)]
static extern IntPtr LoadLibrary(string lpFileName);
protected override CreateParams CreateParams
{
get
{
CreateParams param = base.CreateParams;
if (LoadLibrary("msftedit.dll") != IntPtr.Zero)
{
param.ClassName = "RICHEDIT50W";
}
return param;
}
}
}
答案 0 :(得分:2)
找到根本原因可以给出一个简单的答案:在加载之前将richtextbox设置为readonly并在之后将其设置回readonly。 这也解决了类似的问题:ReadOnly content of RichTextBox doesn't show images
答案 1 :(得分:1)
我发现您可以将rtf文件和richtextbox加载为readonly = false,然后在表格的加载中将其更改为readonly = true,并且图像保留并且滚动条正常工作,并且不能删除或更改数据
答案 2 :(得分:0)
我找到了解决可能的原因的方法。
.NET中的RichTextBox不支持您存储的Rich Text文件的版本。您还可能在Windows上使用了写字板。
诀窍是,将RichTextBox控件放置在窗体上,然后让RichTextBox加载要加载的RTF文件,例如:
richTextBox1.LoadFile("Your File Path", RichTextBoxStreamType.RichText);
运行您的应用程序,然后将RTF文件加载到该RichTextBox上。那么显然此时它不会加载图像。
使用写字板打开原始RTF文件,然后使用Windows截图工具从该RTF文件捕获图像。
在您的应用程序中正在运行的RichTextBox上,粘贴使用截图工具捕获的图像。在您的应用程序中,您拥有RichTextBox并保存了插入图像的新RichTextBox内容。
现在,从您自己的应用程序保存的新RTF文件现在与.NET中的RichTextBox兼容。
您可以像下面这样在RichTextBox中加载此新文件:
richTextBox1.LoadFile("Your File Path", RichTextBoxStreamType.RichText);
这时,您将看到图像以及其他RTF内容。 希望这可以帮助。我花了一些时间才想出这个解决方案。