
前言
在 .NET 10 中,Windows Forms 对剪贴板功能进行了更新,引入了新的 API 以提高类型安全性和避免使用 BinaryFormatter
带来的安全风险。
安装SDK
首先访问.NET 10.0.0-preview链接,下载.NET 10.0.0-preview.1版本SDK,然后直接安装即可。
安装完成后,可以通过dotnet --list-sdks指令查看是否已成功安装.NET 10 review 1
当我们创建.NET 10 类库时,却发现框架列表中并没有.NET 10 选项。
因为Visual Studio默认不可以使用预览版的SDK。因此我们先要在IDE中开启使用预览版SDK功能,具体开启方法如下:
首先选中菜单中的工具,然后点开选项对话框,在环境列表中找到预览功能,找到使用.NET SDK预览版复选框并选中,最后点击确认即可。记得需要重启Visual Studio。
示例API
现在,我们开始创建一个新的项目ClipboardExample,然后实现一些使用新剪贴板功能:
1. 使用 SetDataAsJson
方法将数据以 JSON 格式存储到剪贴板

csharp
using System;
using System.Windows.Forms;
using System.Text.Json;
namespace ClipboardExample
{
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
}
private void SaveDataToClipboard_Click(object sender, EventArgs e)
{
var person = new Person { Name = "张三", Age = 30 };
// 使用 SetDataAsJson 方法将对象以 JSON 格式存储到剪贴板
Clipboard.SetDataAsJson("PersonData", person);
MessageBox.Show("Data saved to clipboard as JSON.");
}
private class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
}
}
2. 使用 TryGetData
方法从剪贴板获取数据

csharp
using System;
using System.Windows.Forms;
using System.Text.Json;
namespace ClipboardExample
{
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
}
private void GetDataFromClipboard_Click(object sender, EventArgs e)
{
if (Clipboard.TryGetData<Person>("PersonData", out var person))
{
MessageBox.Show($"Name: {person.Name}, Age: {person.Age}");
}
else
{
MessageBox.Show("Failed to get data from clipboard.");
}
}
}
}
3. 使用 TryGetData
方法并指定类型解析器
csharp
using System;
using System.Windows.Forms;
using System.Text.Json;
namespace ClipboardExample
{
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
}
private void GetDataWithResolver_Click(object sender, EventArgs e)
{
Func<TypeName, Type> resolver = typeName =>
{
if (typeName.FullName == typeof(Person).FullName)
{
return typeof(Person);
}
return null;
};
if (Clipboard.TryGetData<Person>("PersonData", (Func<System.Reflection.Metadata.TypeName, Type>)resolver, out var person))
{
MessageBox.Show($"Name: {person.Name}, Age: {person.Age}");
}
else
{
MessageBox.Show("Failed to get data from clipboard.");
}
}
}
}
代码说明
SetDataAsJson
方法:将对象以 JSON 格式存储到剪贴板。第一个参数是数据的格式名称,第二个参数是要存储的对象。TryGetData
方法 :从剪贴板获取指定格式的数据。如果获取成功,返回true
并将数据赋值给out
参数;否则返回false
。- 类型解析器 :
TryGetData
方法的重载版本允许指定一个类型解析器,用于解析数据的类型。
执行结果


总结
上述简单的测试了下剪切板的功能,后面我们在尝试其他的内容,敬请期待~
欢迎进群交流学习~