前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >将 WinForms 应用从 .NET Core 3.0 升级到 3.1

将 WinForms 应用从 .NET Core 3.0 升级到 3.1

作者头像
Edi Wang
发布2019-12-16 15:07:38
1.2K0
发布2019-12-16 15:07:38
举报
文章被收录于专栏:汪宇杰博客汪宇杰博客

导语

我作为社区里的“拖控件之王”,拖控件贼心不死,有时候会维护一些老项目,其中包括一个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的工作全部完成!

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-12-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 汪宇杰博客 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档