如果我在字符串中有一些文本,我如何将其复制到剪贴板,以便用户可以将其粘贴到另一个窗口(例如,从我的应用程序到记事本)?
当前回答
这对我来说很管用:
你想做的是:
System.Windows.Forms.Clipboard.SetText("String to be copied to Clipboard");
但是它会导致一个错误,说它必须在ApartmentState.STA的单个线程中。
让我们让它在这样一个线程中运行。它的代码:
public void somethingToRunInThread()
{
System.Windows.Forms.Clipboard.SetText("String to be copied to Clipboard");
}
protected void copy_to_clipboard()
{
Thread clipboardThread = new Thread(somethingToRunInThread);
clipboardThread.SetApartmentState(ApartmentState.STA);
clipboardThread.IsBackground = false;
clipboardThread.Start();
}
在调用copy_to_clipboard()之后,字符串被复制到剪贴板中,因此您可以使用Paste或Ctrl + V并将字符串作为string返回,以复制到剪贴板中。
其他回答
你可以使用System.Windows.Forms.Clipboard.SetText(…)。
使用try-catch,即使它有错误,它仍然会复制。
Try
Clipboard.SetText("copy me to clipboard")
Catch ex As Exception
End Try
如果使用消息框捕获异常,它将显示错误,但值仍然复制到剪贴板。
在Windows窗体中,如果你的字符串在文本框中,你可以很容易地使用这个:
textBoxcsharp.SelectAll();
textBoxcsharp.Copy();
textBoxcsharp.DeselectAll();
System.Windows.Clipboard (PresentationCore.dll)
Winforms: System.Windows.Forms.Clipboard
两者都有一个静态的SetText方法。
使用这个问题中显示的解决方案System.Windows.Forms.Clipboard.SetText(…),会导致异常:
在OLE调用之前,当前线程必须设置为单线程公寓(STA)模式
为了防止这种情况,你可以添加属性:
[STAThread]
to
static void Main(string[] args)
推荐文章
- 在c#中从URI字符串获取文件名
- 检查SqlDataReader对象中的列名
- 如何将类标记为已弃用?
- c# 8支持。net框架吗?
- Linq-to-Entities Join vs GroupJoin
- 为什么字符串类型的默认值是null而不是空字符串?
- 在list中获取不同值的列表
- 组合框:向项目添加文本和值(无绑定源)
- AutoMapper:“忽略剩下的?”
- 如何为ASP.net/C#应用程序配置文件值中的值添加&号
- 从System.Drawing.Bitmap中加载WPF BitmapImage
- 如何找出一个文件存在于c# / .NET?
- 为什么更快地检查字典是否包含键,而不是捕捉异常,以防它不?
- [DataContract]的命名空间
- string. isnullorempty (string) vs. string. isnullowhitespace (string)