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

执行结果

总结

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

欢迎进群交流学习~

相关推荐
sudebao点com10 小时前
一次“Google 能打开,FlexTV 打不开”的 DNS 故障排查:从 curl 超时到完整证据链
windows·macos·https·cdn·dns·nslookup·网络排错
非凡ghost13 小时前
分区助手:Windows 磁盘管理的“瑞士军刀“,分区调整不再怕丢数据
服务器·windows·电脑·软件需求
淡海水17 小时前
01-07-运行时-GC深度剖析-内存分配回收与结构选择
jvm·windows·unity·gc
DAVIED919 小时前
llama.cpp 本地部署完全指南
windows·llama·wsl·llamacpp
云上飞4763696221 小时前
Windows WSL2 + Docker 环境下NVIDIA PhysicsNeMo 安装指南
windows·docker·physicsai·physicsnemo
weixin_66821 小时前
取消Windows 11 默认精简的鼠标右键文件夹菜单
windows·计算机外设
love530love1 天前
彻底清理 Windows 右键“打开方式“中的重复/失效程序项(PyCharm 多版本残留实战 + 自动化脚本)
运维·人工智能·windows·pycharm·jetbrains·toolbox
王维同学1 天前
进程模块枚举、映像身份与线程启动地址关联
c++·windows·安全
x²+(y-√³x²)²=12 天前
Linux打包文件到Windows,文件/文件类型丢失
linux·运维·windows
Rudon滨海渔村2 天前
windows10如何删除多余的输入法 - 仅保留English+拼音
windows·输入法