【问题标题】:Copy empty string using Clipboard.SetText(string)使用 Clipboard.SetText(string) 复制空字符串
【发布时间】:2012-08-14 13:08:30
【问题描述】:

Clipboard.SetText("") 给我一个错误 - “值不能为空”。那么如何使用Clipboard.SetText复制一个空字符串呢?

我已经完成了Clipboard.Clear()。它确实清除了剪贴板,但它不能帮助我粘贴一个空字符串

有什么建议吗?

【问题讨论】:

  • 为什么要粘贴空字符串?您需要粘贴新行吗?
  • Probably the same issue as me : he wanted to keep it nice and simple without a special case when the selection is an empty string.我很想知道在允许“正常”字符串时是否有技术原因阻止空字符串。

标签: c# clipboard


【解决方案1】:

如果您尝试使用 Clipboard.SetText 保存 null 或空字符串,它将永远无法工作。

请参阅 Clipboard.SetText Method (String) (MSDN)。它提到如果文本为 null 或 EmptyClipboard.SetText,则会引发 ArgumentNullException。

因此你无法实现你想要达到的目标。

【讨论】:

  • POLA 违规,如果我见过的话 ;) “我们抛出一个参数Null非空值的异常” ... whut?!
【解决方案2】:

我认为你需要这样做

Clipboard.Clear()

来自MSDN

清除系统剪贴板中的所有数据。

【讨论】:

  • 这是一个更有用的答案。
  • 这在多线程应用程序中不起作用。 The current thread is not in single-threaded apartment (STA) mode. Add the STAThreadAttribute to your application's Main method.
【解决方案3】:

请参阅 Clipboard.Clear Method (System.Windows.Forms) (MSDN)。

Clipboard.Clear();

将清除剪贴板,因此您将“粘贴”一个空字符串。

【讨论】:

    【解决方案4】:

    引用PresentationCore 并调用System.Windows.Clipboard.SetText(string) 而不是System.Windows.Forms.Clipboard.SetText(string)。我使用clipview 来验证System.Windows.Clipboard.SetText("");(不会引发异常)将空字符串存储到剪贴板中。

    此方法使您不必有条件地调用Clear()SetText(),具体取决于您尝试有效设置到剪贴板的字符串。如果您尝试编写代码以将剪贴板设置为任何字符串值,而事先不知道是否需要支持空字符串,这将特别有用。即,此方法使您能够避免将空字符串视为特殊情况(IMO,它不应该是特殊情况,因为这只会令人困惑)。

    此外,从 clipview 中可以看出,Clear() 实际上清空了剪贴板,而不是在其中放置一个空字符串。调用System.Windows.Clipboard.SetText("") 实际上会将一个空字符串值放入剪贴板。当您粘贴时,目标应用程序可以分辨出不同之处,并且如果它愿意,它的实际行为也会有所不同。

    【讨论】:

    • Re: "Reference PresentationCore.dll":或者只是在“.NET”标签(第一个标签)中使用PresentationCore
    • 当我尝试使用System.Windows.Clipboard.SetText() 时,我得到了一个空字符串异常(至于Forms 一个),但对于非空字符串。它是否依赖于 .NET 版本? C# 版本?参考“PresentationCore”中的“路径”(在 C# 项目的 References 下)为:C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\v3.0\PresentationCore.dll
    • @PeterMortensen 我在参考文献中有相同的路径。我正在运行 Windows 10 build 15007,它声称有 .net-4.7,但在“打开或关闭 Windows 功能”下它说我有 .net-3.5,所以我认为当我以 .net-3.5 为目标时它实际上正在运行在 .net-3.5 上,但它可能是最新的修补版本。我不知道如何让System.Windows.Clipboard.SetText() 抛出空字符串。你确定你实际上没有传递它null而不是一个空字符串吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-27
    • 2019-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-22
    相关资源
    最近更新 更多