验证测试 .NET 10 预览版的 Windows 窗体中的剪贴板新增功能

前言

在 .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 方法的重载版本允许指定一个类型解析器,用于解析数据的类型。

执行结果

总结

上述简单的测试了下剪切板的功能,后面我们在尝试其他的内容,敬请期待~

欢迎进群交流学习~

相关推荐
专注VB编程开发20年1 小时前
B.NET编写不阻塞UI线程的同步延时
ui·.net·vb.net·doevents
babytiger3 小时前
windows中用wsl使用cuda
windows·wsl·cuda
Mr.45674 小时前
Windows 11 右键菜单恢复 Windows 10 经典样式:3 种实用方法详解
windows
一勺-_-5 小时前
安装Windows双系统的步骤
windows
慧都小妮子5 小时前
基于.NET UA Client SDK构建跨平台OPC UA客户端应用
.net·opc ua·automation·跨平台应用·unified
追逐时光者5 小时前
C#/.NET/.NET Core技术前沿周刊 | 第 58 期(2025年10.13-10.19)
后端·.net
sukalot7 小时前
windows显示驱动开发-多监视器管理器(三)
windows·驱动开发
CodeCraft Studio7 小时前
PDF处理控件Aspose.PDF教程:在C#中将PDF转换为Base64
服务器·pdf·c#·.net·aspose·aspose.pdf·pdf转base64
Java技术实践9 小时前
JPA 用 List 入参在 @Query中报错 unexpected AST node: {vector}
数据结构·windows·list
wangqiaowq9 小时前
ImmutableList.of() 是 Google Guava 库 提供的一个静态工厂方法,用于创建一个不可变的(immutable)列表。
开发语言·windows·python