在C#的Windows窗体或WPF应用开发中,操作系统剪贴板是常见的功能需求,比如实现复制粘贴功能、跨应用传递数据等。.NET框架已经内置了Clipboard类,位于System.Windows.Forms命名空间下,开发者可以直接调用其方法完成剪贴板的读写操作。

Clipboard类基础说明
Clipboard类是静态类,所有方法都通过类名直接调用,不需要实例化对象。它支持多种数据格式的操作,包括文本、图片、音频、文件列表等,本文主要讲解最常用的文本和图片两种格式的操作方式。
使用Clipboard类前,需要先确认项目已经引用了System.Windows.Forms程序集,如果是WPF项目,还需要添加对应的Windows窗体引用,或者在代码中处理跨线程访问的问题。
文本内容的读写操作
写入文本到剪贴板
写入文本使用SetText方法,该方法有两个重载,一个只接收文本内容,另一个可以指定文本类型,比如TextDataFormat.Text表示纯文本,TextDataFormat.UnicodeText表示Unicode编码文本。
下面是写入纯文本到剪贴板的示例代码:
using System;
using System.Windows.Forms;
namespace ClipboardDemo
{
public class ClipboardTextHelper
{
// 写入文本到剪贴板
public static void WriteTextToClipboard(string text)
{
try
{
// 调用Clipboard类的SetText方法写入文本
Clipboard.SetText(text, TextDataFormat.Text);
MessageBox.Show("文本已成功写入剪贴板");
}
catch (Exception ex)
{
MessageBox.Show($"写入剪贴板失败:{ex.Message}");
}
}
}
}
从剪贴板读取文本
读取文本使用GetText方法,同样可以指定文本类型,也可以不指定参数直接读取默认文本格式。读取前建议先调用ContainsText方法判断剪贴板中是否存在文本内容,避免出现异常。
读取文本的示例代码如下:
using System;
using System.Windows.Forms;
namespace ClipboardDemo
{
public class ClipboardTextHelper
{
// 从剪贴板读取文本
public static string ReadTextFromClipboard()
{
try
{
// 先判断剪贴板中是否有文本内容
if (Clipboard.ContainsText())
{
// 读取剪贴板中的文本
string text = Clipboard.GetText(TextDataFormat.Text);
return text;
}
else
{
MessageBox.Show("剪贴板中没有文本内容");
return string.Empty;
}
}
catch (Exception ex)
{
MessageBox.Show($"读取剪贴板失败:{ex.Message}");
return string.Empty;
}
}
}
}
图片内容的读写操作
写入图片到剪贴板
写入图片使用SetImage方法,参数需要传入Image类型的对象,可以是从文件加载的图片,也可以是程序生成的图片。同样建议用try-catch包裹操作代码,处理可能的异常。
写入图片的示例代码如下:
using System;
using System.Drawing;
using System.Windows.Forms;
namespace ClipboardDemo
{
public class ClipboardImageHelper
{
// 写入图片到剪贴板,参数为图片文件路径
public static void WriteImageToClipboard(string imagePath)
{
try
{
// 从文件路径加载图片
Image image = Image.FromFile(imagePath);
// 调用SetImage方法写入剪贴板
Clipboard.SetImage(image);
MessageBox.Show("图片已成功写入剪贴板");
}
catch (Exception ex)
{
MessageBox.Show($"写入图片失败:{ex.Message}");
}
}
}
}
从剪贴板读取图片
读取图片使用GetImage方法,读取前可以调用ContainsImage方法判断剪贴板中是否存在图片内容。读取到的Image对象可以直接用于显示或者保存到本地。
读取图片的示例代码如下:
using System;
using System.Drawing;
using System.Windows.Forms;
namespace ClipboardDemo
{
public class ClipboardImageHelper
{
// 从剪贴板读取图片
public static Image ReadImageFromClipboard()
{
try
{
// 判断剪贴板中是否有图片
if (Clipboard.ContainsImage())
{
// 读取剪贴板中的图片
Image image = Clipboard.GetImage();
return image;
}
else
{
MessageBox.Show("剪贴板中没有图片内容");
return null;
}
}
catch (Exception ex)
{
MessageBox.Show($"读取图片失败:{ex.Message}");
return null;
}
}
}
}
操作注意事项
- 剪贴板操作属于系统级操作,部分场景下可能会因为权限问题失败,比如在高权限运行的应用中访问低权限应用的剪贴板内容。
- 在WPF应用中使用
System.Windows.Forms.Clipboard类时,需要确保线程是STA(单线程公寓)模式,否则会抛出异常,可以在方法上添加[STAThread]特性。 - 写入剪贴板的内容会被新的写入操作覆盖,如果需要持久化保存剪贴板内容,需要在写入后自行存储到本地或数据库。
- 操作完成后不需要手动释放
Clipboard类的资源,因为它是静态类,由系统自动管理生命周期。
C#Clipboard类剪贴板操作读取文本写入图片修改时间:2026-07-11 10:21:32