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

执行结果

总结

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

欢迎进群交流学习~

相关推荐
追逐时光者8 小时前
TIOBE 公布 C# 是 2025 年度编程语言
后端·.net
吴声子夜歌8 小时前
Java数据结构与算法——基本数学问题
java·开发语言·windows
这儿有一堆花11 小时前
用原生脚本编写无害恶作剧
windows
因我你好久不见11 小时前
Windows部署springboot jar支持开机自启动
windows·spring boot·jar
夜流冰11 小时前
Excel - MS Support for Excel: 2 Collaborate
数据库·windows·excel
林瞅瞅12 小时前
PowerShell 启动卡顿?内存飙升?原来是 800MB 的历史记录在作祟!
windows
ServBay12 小时前
C# 成为 2025 年的编程语言,7个C#技巧助力开发效率
后端·c#·.net
Shepherd061912 小时前
【Windows Server 实战】WAC 反向代理配置
windows
云小逸13 小时前
【windows系统编程】第一章 Windows 系统核心架构与基础概念
windows·架构
獨枭14 小时前
.NET Framework 依赖版本冲突解决方案:从现象到本质
.net