在C#里操作系统剪贴板主要借助System.Windows.Forms命名空间下的Clipboard类。这个类封装了对Windows剪贴板的读写方法,能够把文本、图片、文件列表等数据放入剪贴板,也可以从中读取。下面分别介绍复制文本和复制图片到剪贴板的基础做法。

复制文本到剪贴板
把一段字符串写入剪贴板非常简单,调用Clipboard.SetText方法即可。可以指定文本格式,比如Unicode文本。下面的例子演示在Windows窗体程序中点击按钮后把指定文本复制到剪贴板:
using System;
using System.Windows.Forms;
namespace ClipboardDemo
{
public class Form1 : Form
{
public Form1()
{
Button btn = new Button();
btn.Text = "复制文本";
btn.Click += (s, e) =>
{
// 将文本以Unicode格式放入系统剪贴板
Clipboard.SetText("这是一段来自C#程序的文本", TextDataFormat.UnicodeText);
MessageBox.Show("文本已复制到剪贴板");
};
Controls.Add(btn);
}
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.Run(new Form1());
}
}
}
复制图片到剪贴板
复制图片时使用Clipboard.SetImage方法,传入一个Image或Bitmap对象。以下代码把程序生成的简单位图放到剪贴板中:
using System;
using System.Drawing;
using System.Windows.Forms;
namespace ClipboardImageDemo
{
public class Form1 : Form
{
public Form1()
{
Button btn = new Button();
btn.Text = "复制图片";
btn.Click += (s, e) =>
{
// 创建一张红色背景的位图
Bitmap bmp = new Bitmap(200, 200);
using (Graphics g = Graphics.FromImage(bmp))
{
g.Clear(Color.Red);
}
// 将位图写入系统剪贴板
Clipboard.SetImage(bmp);
MessageBox.Show("图片已复制到剪贴板");
};
Controls.Add(btn);
}
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.Run(new Form1());
}
}
}
注意事项
使用Clipboard类需要注意以下几点:
- 包含Clipboard类的程序集是System.Windows.Forms,在非窗体项目里要手动添加引用。
- 涉及剪贴板操作的线程必须设置为单线程单元(STA),窗体程序默认满足,控制台程序需在Main方法上标记[STAThread]。
- 读取剪贴板可用Clipboard.GetText()和Clipboard.GetImage(),但要先判断ContainsText或ContainsImage避免异常。
通过上述方法,就能在C#中轻松实现把文本和图片复制到系统剪贴板的基础功能。