Detect any image on clipboard(检测剪贴板上的任何图像)
问题描述
现在,我想防止用户将带有任何类型图像的任何内容粘贴到富文本框中。Clipboard.ContainsImage不起作用,因为它只检测某些类型,如果剪贴板包含图像文本,则不会检测到它。 我需要的是一种方法来检测文本中的图像,单独的图像,多个图像...在剪贴板内,以便能够在发生这种情况时清除剪贴板。我需要避免这些大量内容才能到达数据库...谢谢
推荐答案
问题不仅仅是阻止图像,因为rtf可以嵌入任何对象,包括Word文档或任意二进制数据。
我能想到的只有3个选项
限制您允许保存到数据库的最大数据大小,此时低于该大小的图像不会有问题,因为它在允许的大小内。
使用允许您解析和理解RTF内容的库,以便您可以检查除标准文本和格式之外的任何内容。然后,您可以去掉任何嵌入的二进制对象。或者,您可以处理WM_Paste并检查剪贴板中的RTF文本。如果它有RTF文本,你可以解析它,并在粘贴时而不是保存时剥离嵌入的对象。如果它没有RTF版本,请不要忘记检查它是否有纯文本版本。
拦截并处理WM_Paste消息,并使用RichTextBox.Paste(DateFormats)控制可以粘贴哪些数据类型。然后,您可以将其限制为仅将数据的纯文本版本粘贴到剪贴板上,该剪贴板不能包含嵌入的对象。此处的缺点是用户无法粘贴来自其他应用程序的格式化文本,所有格式都将丢失。
1是最简单的,但接受用户将能够嵌入小图像和其他小对象(如Word文档或视频),只要它低于最大大小。
2比较复杂,但提供了最佳的用户体验。
3比2简单,但提供的用户体验很差,就好像您不关心格式化文本就不会使用富文本框一样。除非您只需要纯文本并且使用的是其较大的文本容量,但如果是这种情况,您将只获取纯文本版本以保存到不包含图像的数据库中。
这篇关于检测剪贴板上的任何图像的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:检测剪贴板上的任何图像
基础教程推荐
- C# 从 List<List<int>> 中删除重 2022-01-01
- 我应该在后面的代码中直接使用 Linq To SQL 还是使 2022-01-01
- .NET SerialPort DataReceived 事件未触发 2022-01-01
- 当值可以是对象或空数组时反序列化 JSON 2022-01-01
- WPF 模态进度窗口 2022-01-01
- 如何使用 .Net 检查 Active Directory 服务器是否已启动并正在运行? 2022-01-01
- Moq It.Is<>不匹配 2022-01-01
- 如果有人提交恶意软件Nuget包怎么办? 2022-01-01
- Azure Functions:CosmosDBTrigger 未在 Visual Studio 中触发 2022-01-01
- 禁止输入少量字符,例如'<'、'&a 2022-01-01
