Richtextbox不显示图像

时间:2017-02-16 15:59:28

标签: c# .net winforms

编辑:感谢评论我注意到根本原因是将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;
        }
    }
}

3 个答案:

答案 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内容。 希望这可以帮助。我花了一些时间才想出这个解决方案。