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

执行结果

总结

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

欢迎进群交流学习~

相关推荐
计算机学姐35 分钟前
基于Asp.net的教学管理系统
vue.js·windows·后端·sqlserver·c#·asp.net·visual studio
T风呤1 小时前
ffmpeg windows 基本命令
windows·ffmpeg
firstime_tzjz1 小时前
windows下使用msys2编译ffmpeg
windows·ffmpeg
caoruipeng3 小时前
Windows编程----进程的当前目录
c++·windows·c#
老狼主4 小时前
C++ Windows下屏幕截图
c++·windows
h20170106874 小时前
C#中的委托是什么?事件是不是一种委托?委托与事件的区别?
开发语言·c#·.net·面试题
开开心心就好4 小时前
电脑睡眠智能管控:定时、依状态灵活调整,多模式随心选
javascript·windows·python·安全·django·pdf·电脑
babytiger4 小时前
windows 平台如何点击网页上的url ,会打开远程桌面连接服务器
linux·运维·服务器·windows
waicsdn_haha4 小时前
Win7重装不翻车!ISO镜像安全下载渠道+BIOS设置避雷手册
windows·系统重装·windows7·win7·重装电脑·win7重装系统·电脑重装
麻芝汤圆5 小时前
在虚拟机上安装 Hadoop 全攻略
大数据·linux·服务器·hadoop·windows·分布式