点击上方蓝字关注“汪宇杰博客”

导语

我作为社区里的“拖控件之王”,拖控件贼心不死,有时候会维护一些老项目,其中包括一个2004年的WinForms 软件。9月份的时候我曾经将它迁移到了 .NET Core 3.0,因为代码实现完全没动,所以基本没领福报。然而 .NET Core 3.1 有一些升级上的变化,需要注意。

背景

这个 WinForms 工程是一个开源的屏幕尺工具,用于测量屏幕上元素的尺寸,由  Jeff Key 在 15 年前开发,至今好用。原作者不维护后,我将源代码接盘维护,继续开源在 GitHub上。

https://github.com/EdiWang/Ruler

虽然我自己也用UWP实现过类似的屏幕尺,公众号里也发文章介绍过《》,可惜后来,UWP这个技术……嗯,不提了,话说这把屏幕尺支持横竖两种排版、固顶显示、透明度调整等常用功能,大家有需要的话欢迎下载使用。

升级到.NET Core 3.1

这个工程最早是 .NET Framework 2.0 的,升级到 .NET Core 3.0 的步骤我不多介绍了,官网或社区都有详细的教程,由于功能简单,并不需要代码实现和逻辑上的修改。但是 .NET Core 3.1 移除了一些老控件,因此这次升级需要修改代码。

先来看看官方的说明:

Windows Forms Controls Removal

The following Windows Forms controls have been removed from .NET Core 3.1:

  • DataGrid

  • ToolBar

  • ContextMenu

  • Menu

  • MainMenu

  • MenuItem

These controls were replaced with more powerful controls in .NET Framework 2.0, back in 2005. They have not been available by default in the Visual Studio Designer Toolbox for many years. As a result, we decided to remove these controls and focus only on the new ones.

官方也给出了这些被删库的老控件的替换方案:

参见 https://devblogs.microsoft.com/dotnet/announcing-net-core-3-1/

在这个Ruler工程中,我需要迁移的主要就是菜单控件。

类型替换

将 ContextMenu 替换为 ContextMenuStrip

将 MenuItem 替换为 ToolStripMenuItem

如:

private readonly ContextMenu _menu = new ContextMenu();

private MenuItem _verticalMenuItem;

private MenuItem _toolTipMenuItem;

替换为

private readonly ContextMenuStrip _menu = new ContextMenuStrip();

private ToolStripMenuItem _verticalMenuItem;

private ToolStripMenuItem _toolTipMenuItem;

API 差异

Shortcut 枚举类型被删库,老代码:

private MenuItem AddMenuItem(string text, Shortcut shortcut = Shortcut.None)

{

MenuItem mi = new MenuItem(text);

mi.Click += MenuHandler;

mi.Shortcut = shortcut;

_menu.MenuItems.Add(mi);

return mi;

}

改为

Keys shortcut = Keys.None

...

mi.ShortcutKeys = shortcut;

类似的,MenuItems属性被删库,老代码:

_menu.MenuItems.Add(mi);

改为

_menu.Items.Add(mi);

这段函数升级后的完整代码:

private ToolStripMenuItem AddMenuItem(string text, Keys shortcut = Keys.None)

{

ToolStripMenuItem mi = new ToolStripMenuItem(text);

mi.Click += MenuHandler;

mi.ShortcutKeys = shortcut;

_menu.Items.Add(mi);

return mi;

}

在旧版Menu控件里,“-” 字符串代表分隔符,这个现在也有专门的类型表示,所以老代码:

AddMenuItem("-");

修改为

_menu.Items.Add(new ToolStripSeparator());

现在就能成功编译运行了,新版菜单控件效果如下:

至此,升级.NET Core 3.1的工作全部完成!

将 WinForms 应用从 .NET Core 3.0 升级到 3.1相关推荐

  1. .NET Core 3.0中的WinForms创建集中式拉取请求中心

    Windows 窗体(或简称 WinForms),多年来被用于开发具有丰富和交互式界面的基于 Windows 的强大应用程序. 各类企业对这些桌面应用程序的投入量非常巨大,每月有大约 240 万开发人 ...

  2. 向net core 3.0进击——Swagger的改变

    前言 十一小长假在不知不觉间可都没了,在这个小尾巴的空隙,把这两天鼓捣的net core 3.0升级过程记录一下,首先还是根据之前的顺序一个个补充进来,先从Swagger的变化说起(新建工程什么的不多 ...

  3. 福爆 | 博客升级 .NET Core 3.0 又踩一坑

    点击上方蓝字关注"汪宇杰博客" 导语 昨天刚发了一篇< 生产大爆炸 发生问题的是已经被删除的博客文章,正常情况下,这些不存在的文章会直接显示自定义的404页面,但实际上产生了 ...

  4. ASP.NET Core 实战:将 .NET Core 2.0 项目升级到 .NET Core 2.1

    一.前言  最近一两个星期,加班,然后回去后弄自己的博客,把自己的电脑从 Windows 10 改到 Ubuntu 18.10 又弄回 Windows 10,原本计划的学习 Vue 中生命周期的相关知 ...

  5. ASP.NET Core 2.0 特性介绍和使用指南

    ASP.NET Core 2.0 发布日期:2017年8月14日 ASP.NET团队宣布ASP.NET Core 2.0正式发布,发布Visual Studio 2017 15.3支持ASP.NET ...

  6. .NET Core 1.1 升级公告

    2016年11月16日发布.NET Core 1.1 . 它包括对其他Linux发行版的支持,有很多更新,是当前的第一个版本. 将在下面描述所有这些变化.  它是"Go Live" ...

  7. WinForms项目升级.Net Core 3.0之后,没有WinForm设计器?

    目录 .NET Conf 2019 Window Forms 设计器 2019 9.23-9.25召开了 .NET Conf 2019 大会,大会宣布了 .Net Core 3.0 正式版.这两天我也 ...

  8. 用WinForm/WPF代码来为.NET Core 3.0功能投票

    我们在5月报道过微软希望在.NET Core 3.0上运行WinForms和WPF.为了实现这个目标,他们正在构建一个新工具,该工具将允许你投票以决定他们需要把哪些API移植到.NET Core.但是 ...

  9. .NET Core 3.0特性初探:C# 8、WPF、Windows Forms、EF Core

    .NET Core的下一个主要版本最近进入了预览阶段,.NET Core 3.0将支持使用Windows Presentation Foundation (WPF).Windows Forms(Win ...

最新文章

  1. [Step By Step]使用SLT工具从SAP导入数据到SAP HANA
  2. linux内核编译步骤!
  3. Rainmeter 天气
  4. Java 9幕后花絮:新功能从何而来?
  5. Spring支持如下5种作用域
  6. flash 4K扇区写入函数
  7. java张int 和 Integer的区别
  8. C++ char 类型:字符型和最小的整型
  9. 卸载阿里云服务器的mysql_阿里云服务器购买,双11领阿里云服务器优惠券!
  10. python升级版本后出现的yum错误
  11. 计算机网络领悟摩尔定,计算机网络等133信息技术展望P15-P17.PPT
  12. 了解IHttpModule接口事件执行顺便 获取Session
  13. 超级好用的画图吸色工具FastSton Capture
  14. PTA查验身份证 (15 分) 一个合法的身份证号码由17位地区、日期编号和顺序编号加1位校验码组成。
  15. DVWA(全级别通关教程详解)
  16. java获取当前学期
  17. Python机器学习:值得反复练习的8个项目
  18. 利用python爬取租房信息网_Python3爬虫实战:以爬取小猪短租租房信息为例
  19. cisco privilege权限
  20. 2021-11-30 网工基础(三)物理层、数据链路层、VRP系统等基础

热门文章

  1. 【转】Asp.Net中Excel操作权限的问题
  2. chrome 固定缩放比例_您如何调整Google Chrome浏览器的用户界面缩放比例?
  3. 查看模拟器使用端口_为什么我们仍然使用模拟音频端口?
  4. 浏览器显示无法解析服务器的DNS地址,使用搜狗浏览器时突然弹出无法解析服务器的DNS地址该如何处理...
  5. 基于 HTML5 Canvas 绘制的电信网络拓扑图
  6. solrcloud线上创建collection,修改默认配置
  7. ext 浅谈类的实例
  8. Linux重定向详解
  9. tplink-wr841n无线路由接入到局域网三层交换机方法
  10. Oracle 10R2 研究--db_file_multiblock_read_count对成本的影响