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

执行结果

总结

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

欢迎进群交流学习~

相关推荐
泓铮6 小时前
Windows 环境下 WSL2 与 VMware Workstation 17 共存机制研究与工程实践
windows
明湖起风了10 小时前
mqtt消费堆积
java·jvm·windows
私人珍藏库10 小时前
[Windows] 【灵犀Claw生成】酷狗加密音乐批量转换工具 Xy Music Converter
windows·工具·软件·多功能
handsomestWei12 小时前
claude-code在win环境安装使用
windows·ai编程·claude·安装配置·cc-switch
秦时明月之君临天下13 小时前
Windows如何删除任务管理器中的某个服务?
windows
麦田里的守望者_zhg13 小时前
Windows 执行 wsl --update 报错 1603:注册表权限导致 WSL 安装损坏问题排查与修复
windows
~plus~14 小时前
.NET 8 C# 委托与事件实战教程
网络·c#·.net·.net 8·委托与事件·c#进阶
❆VE❆15 小时前
Claude Code 安装与配置完整指南(Windows)
windows·claude code
航Hang*15 小时前
VMware vSphere 云平台运维与管理基础——第5章:VMware vSphere 5.5 高级特性
运维·服务器·开发语言·windows·学习·虚拟化
Mapleay15 小时前
Ubuntu 源的重要性!之 libgmp-dev 无法安装
linux·服务器·windows