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简单,但提供的用户体验很差,就好像您不关心格式化文本就不会使用富文本框一样。除非您只需要纯文本并且使用的是其较大的文本容量,但如果是这种情况,您将只获取纯文本版本以保存到不包含图像的数据库中。
这篇关于检测剪贴板上的任何图像的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:检测剪贴板上的任何图像


基础教程推荐
- 如何在 IDE 中获取 Xamarin Studio C# 输出? 2022-01-01
- 为什么Flurl.Http DownloadFileAsync/Http客户端GetAsync需要 2022-09-30
- 将 Office 安装到 Windows 容器 (servercore:ltsc2019) 失败,错误代码为 17002 2022-01-01
- 有没有办法忽略 2GB 文件上传的 maxRequestLength 限制? 2022-01-01
- 如何激活MC67中的红灯 2022-01-01
- SSE 浮点算术是否可重现? 2022-01-01
- rabbitmq 的 REST API 2022-01-01
- 将 XML 转换为通用列表 2022-01-01
- MS Visual Studio .NET 的替代品 2022-01-01
- c# Math.Sqrt 实现 2022-01-01