如何防止 richTextBox 粘贴图像?

3

我正在使用c#编程,其中有一个richTextBox。

在运行时,我通过编码将一些位图图像插入到richTextBox中。但是我希望防止用户拖动我插入的图像或在richTextBox中粘贴其他图像。

我该如何实现这一点?

谢谢!


你可以将richtextbox属性更改为“readonly”,但是你不想禁用文本的“编写/复制粘贴”功能。我说得对吗? - Lost_In_Library
2
你应该将你的答案添加为问题的答案并接受它。这会给它一个结束的标志。 - Mark Hall
请您将答案从问题中移除并作为新的回答添加,然后再接受它。这将提高问题对其他访问者的实用性。 - musefan
这对我来说看起来不是重复的。TheJonz回答了一些我可以使用的内容,而这些内容在“已经回答”的链接中没有找到。我猜这两个问题都有点模糊,因为它们没有说明应该如何处理非正式文本数据。 - Andreas Vergison
3个回答

2
如果您只想允许从剪贴板粘贴的纯文本,可以按照以下步骤操作...(警告:这将替换剪贴板中的内容为纯文本)
private void textbox_KeyDown(object sender, KeyEventArgs e)
{
    if (e.Control && e.KeyCode == Keys.V)
    {
        Clipboard.SetText((string)Clipboard.GetData("Text"), TextDataFormat.Text);
    }
}

通过这样做,您的RichTextBox将仍然允许撤消,并且在有一些文本高亮时也会正常工作(这两个功能都不受Zarathos答案支持,Zarathos的答案在此处:如何使RichTextBox只能输入纯文本?


这段代码非常有用,可以将OneNote框中的文本以纯文本模式粘贴到RTF控件中。默认为图像。 - Andreas Vergison
您仍然可以使用Shift+Insert来粘贴图像。 - Dorus
最好使用DataFormats.Text而不是"Text" - AntiHeadshot

1

嗨,谢谢回复。我已经更新了问题并提供了解决方案。我将AllowDrop属性设置为false,它可以正常工作。但是关于粘贴,我希望用户可以粘贴文本。不过我已经找到了解决方案。谢谢。 - Ali.M

0

我用了这段代码,它完美地运行了:

private void richTextBox1_KeyPress(object sender, KeyPressEventArgs e)
    {
        //if ((Control.ModifierKeys & Keys.Control) == Keys.Control && (e.KeyChar == 'V' || e.KeyChar == 'v'))
        if (((int)e.KeyChar) == 22)
        {
            if(hasImage(Clipboard.GetDataObject()));
            {
                e.Handled = true;
                richTextBox1.Undo();
                MessageBox.Show("can't paste image here!!");
            }


        }
    }

    private Boolean hasImage(object obj)
    {
        System.Windows.Forms.RichTextBox richTextBox = new System.Windows.Forms.RichTextBox();
        Object data = Clipboard.GetDataObject();
        Clipboard.SetDataObject(data);
        richTextBox.Paste();
        Clipboard.SetDataObject(data);
        int offset = richTextBox.Rtf.IndexOf(@"\f0\fs17") + 8; // offset = 118;
        int len = richTextBox.Rtf.LastIndexOf(@"\par") - offset;
        return richTextBox.Rtf.Substring(offset, len).Trim().Contains(@"{\pict\");
    }

并在richTextBox中禁用了拖放功能。
谢谢


你为什么使用 offsetlen?为什么不使用简单的 richTextBox.Rtf.Contains(@"{\pict\") - 8oris

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接