Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >将 WinForms 应用从 .NET Core 3.0 升级到 3.1

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

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

导语

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【翻译】.NET Core3.1发布
我们很高兴宣布.NET Core 3.1的发布。实际上,这只是对我们两个多月前发布的.NET Core 3.0的一小部分修复和完善。最重要的是.NET Core 3.1是长期支持(LTS)版本,并且将支持三年。和过去一样,我们希望花一些时间来发布下一个LTS版本。额外的两个月(在.NET Core 3.0之后)使我们能够选择和实施在已经非常稳定的基础上进行的正确改进。
梁规晓
2019/12/17
1.6K0
【愚公系列】2023年11月 Winform控件专题 ContextMenuStrip控件详解
Winform控件是Windows Forms中的用户界面元素,它们可以用于创建Windows应用程序的各种视觉和交互组件,例如按钮、标签、文本框、下拉列表框、复选框、单选框、进度条等。开发人员可以使用Winform控件来构建用户界面并响应用户的操作行为,从而创建功能强大的桌面应用程序。
愚公搬代码
2023/11/30
1.4K0
【愚公系列】2023年11月 Winform控件专题 NotifyIcon控件详解
Winform控件是Windows Forms中的用户界面元素,它们可以用于创建Windows应用程序的各种视觉和交互组件,例如按钮、标签、文本框、下拉列表框、复选框、单选框、进度条等。开发人员可以使用Winform控件来构建用户界面并响应用户的操作行为,从而创建功能强大的桌面应用程序。
愚公搬代码
2023/11/30
1.7K0
关于WinForms的跨显示器DPI自适应
WinForms 是运行在Windows上的传统.NET桌面应用技术框架。由于历史原因,它对高DPI以及跨不同DPI屏幕的支持有些问题,本文将探索尽可能的解决方案。
Edi Wang
2019/07/24
2.7K0
关于WinForms的跨显示器DPI自适应
【愚公系列】2023年11月 Winform控件专题 MenuStrip控件详解
Winform控件是Windows Forms中的用户界面元素,它们可以用于创建Windows应用程序的各种视觉和交互组件,例如按钮、标签、文本框、下拉列表框、复选框、单选框、进度条等。开发人员可以使用Winform控件来构建用户界面并响应用户的操作行为,从而创建功能强大的桌面应用程序。
愚公搬代码
2023/11/30
8980
用C# (.NET Core) 实现迭代器设计模式
本文的概念来自深入浅出设计模式一书 项目需求 有两个饭店合并了, 它们各自有自己的菜单. 饭店合并之后要保留这两份菜单. 这两个菜单是这样的: 菜单项MenuItem的代码是这样的: 最初我们是这样设
solenovex
2018/04/28
8090
用C# (.NET Core) 实现迭代器设计模式
C# 添加右键菜单
这节内容很简单,本来不打算写的,有群友技术群问了,所以就整理了下写出来了。这节实例是给datagrid添加右键操作菜单,接下来开始正文讲解。
用户9127601
2022/03/23
1.8K0
C# 添加右键菜单
【愚公系列】2023年11月 Winform控件专题 Label控件详解
Winform控件是Windows Forms中的用户界面元素,它们可以用于创建Windows应用程序的各种视觉和交互组件,例如按钮、标签、文本框、下拉列表框、复选框、单选框、进度条等。开发人员可以使用Winform控件来构建用户界面并响应用户的操作行为,从而创建功能强大的桌面应用程序。
愚公搬代码
2023/11/21
1.4K0
【愚公系列】2023年10月 WPF控件专题 Menu控件详解
WPF控件是Windows Presentation Foundation(WPF)中的基本用户界面元素。它们是可视化对象,可以用来创建各种用户界面。WPF控件可以分为两类:原生控件和自定义控件。
愚公搬代码
2023/10/13
5820
[WPF]是时候将WPF控件库从.Net Framework升级到.NET Core 3.1
去年中我曾考虑将我的控件库项目Kino.Toolkit.Wpf升级到.NET Core,不过很快放弃了,因为当时.NET Core是预览版,编译WPF还需要使用最新的Visual Studio 2019,这样作为一个教学项目不够友好。到了今天.NET Core 3.1都出来了,已经正式支持WPF和Winform,Visual Studio 2019也已经普及,我觉得应该是时候将我的控件库升级到.NET Core。那么现在是WPF正式迁移到.NET Core的好时机吗?我认为还不是,把一个成熟的WPF程序迁移到.NET Core风险任然较大,而且不见得有多少好处。但对各种WPF类库/控件库来说情况又不一样了,为了可以满足更多的用户,让控件库可以同时支持.NET Framework和.NET Core十分重要;而且通常类库对其它组件的依赖较少,升级的风险没那么大。所以要玩.NET Core的WPF,从类库/控件库开始是一个好的选择。
dino.c
2020/04/10
4.4K0
[WPF]是时候将WPF控件库从.Net Framework升级到.NET Core 3.1
使用.NET Core 构建现代化的桌面应用
我们今天要聊的内容主要桌面开发四个方面:Windows平台、.NET Core 3 平台上的WPF,Winform, 应用打包解决方案 MSIX 和 XAML 群岛访问原来UWP的控件,让我们的应用程序迅速现代化。
张善友
2020/06/19
2.4K0
.NET Core 3.1 升级到 .NET 8
.NET Core 3.1 已经用了很长一段时间,其实在 2022 年的年底微软已经不提供支持了,后面的一个 LTS 版本 .NET 6 也会在 2024 年 11 月终止支持,所以直接升级到 .NET 8 是最好的选择。
oec2003
2023/12/14
6810
.NET Core 3.1 升级到 .NET 8
Extensions in UWP Community Toolkit - SurfaceDialTextbox
概述 UWP Community Toolkit Extensions 中有一个为TextBox 提供的 SurfaceDial 扩展 - SurfaceDialTextbox,本篇我们结合代码详细讲解 SurfaceDialTextbox 的实现。 SurfaceDialTextbox 为 TextBox 提供了一种简单的 Surface Dial 的菜单和操作方式,支持设置 TextBox 操作在 Dial 中的圆形菜单,选择后旋转 Dial 可以方便的对 TextBox 中的数值进行调整,调整方式类似
Shao Meng
2018/04/28
1.1K0
Extensions in UWP Community Toolkit - SurfaceDialTextbox
.NET 基金会项目介绍-Windows Forms
Windows Forms 是属于 .Net 基金会的一个项目,本文将简要介绍该项目相关的信息。
newbe36524
2020/03/16
8320
“老坛泡新菜”:SOD MVVM框架,让WinForms焕发新春
火热的MVVM框架 最近几年最热门的技术之一就是前端技术了,各种前端框架,前端标准和前端设计风格层出不穷,而在众多前端框架中具有MVC,MVVM功能的框架成为耀眼新星,比如GitHub关注度很高的Vue.js ,由于是国人作品,其设计风格和文档友好度对国人而言更胜一筹,因此我也将它推荐到公司采用,其中我推荐都理由就是它非常优秀的MVVM功能,面向数据而不是面向DOM细节相比jQuery等更加节省代码,更符合后端程序员的胃口,也更有利于UI设计人员跟程序员都分工配合。 下面是Vue.js实现MVVM功能的原理
用户1177503
2018/02/27
4.1K0
“老坛泡新菜”:SOD MVVM框架,让WinForms焕发新春
技术速递|调用异步功能 - WinForms 在 .NET 9 中的未来发展
随着 .NET 的不断发展,WinForms 开发者可用的工具也在不断进步,这使得开发更加高效且应用响应更迅速。在 .NET 9 中,我们很高兴引入了一系列新的异步 API,这些 API 大大简化了UI管理任务。从更新控件到显示窗体和对话框,这些新增功能以全新的方式将异步编程的强大功能引入到 WinForms 中。在本文中,我们将深入探讨四个关键 API,解释它们的工作原理、适用场景以及如何开始使用它们。
JusterZhu
2025/01/23
2770
技术速递|调用异步功能 - WinForms 在 .NET 9 中的未来发展
.NET Core - 解决VS2019中.net core WinForms暂时无法使用Designer的临时方法
dotnet/winforms - Using the Classic WinForms Designer in WinForms Core, 请放心使用 .
Enjoy233
2019/05/06
2.3K0
.NET Core - 解决VS2019中.net core WinForms暂时无法使用Designer的临时方法
WPF 使用 Microsoft.Toolkit.Wpf.UI.Controls 的 InkCanvas 做高性能笔迹应用
本文告诉大家如何在 WPF 中应用上 UWP 的笔迹控件,从而实现性能超级高的笔迹应用的方法
林德熙
2021/12/23
1.3K0
使用C# (.NET Core) 实现组合设计模式 (Composite Pattern)
本文的概念性内容来自深入浅出设计模式一书. 本文需结合上一篇文章(使用C# (.NET Core) 实现迭代器设计模式)一起看. 上一篇文章我们研究了多个菜单一起使用的问题. 需求变更 就当我们感觉我
solenovex
2018/05/30
1.1K0
WPF 引用 UWP 控件 不打包为 MSIX 分发的方法
按照微软的官方文档,大部分的文档都会说如果用了 XAML Islands 等技术的时候,需要新建一个打包项目,将 WPF 应用打包为 msix 等才可以进行分发和使用。但是实际上不打包也可以,此时可以和此前的 Win32 应用一样的分发方式进行分发,可以支持到 Win7 系统,当然了在 Win7 系统上可用不了 UWP 的控件,但是至少应用软件自身可以在 Win7 继续运行的。可以通过判断系统版本决定功能是否开放,如是 Win10 版本,那么开放 UWP 控件部分的使用
林德熙
2021/12/23
8080
推荐阅读
相关推荐
【翻译】.NET Core3.1发布
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档