温故知新,.Net Core遇见WinForms客户端窗体框架,在DotNet Core大一统基础上老树发芽...

什么是WinForm

https://docs.microsoft.com/zh-cn/dotnet/desktop/winforms

Windows窗体(Windows Form),简称WinForms,是一个可创建适用于Windows的丰富桌面客户端应用的UI框架。Windows窗体开发平台支持广泛的应用开发功能,包括控件、图形、数据绑定和用户输入。Windows 窗体采用Visual Studio中的拖放式可视化设计器,可轻松创建Windows窗体应用。

WinForm的来世今生

说起WinForm,其实很多现在的程序员已经是不用它了,原因是其实它已经是老爷爷了,微软推出WinForms之后,继而推出了WPFUWPWinUIMAUI等更新的客户端应用框架。

但是论资历,在Windows平台,先是经历了Windows API + C,江湖人称Win32,随后C++的发展,诞生了经典的MFC(Microsoft Foundation Class),配合C++,还是不错的。

Windows API && C - 最早的开发Windows GUI程序的思路。用C语言直接调用Windows操作系统提供的API函数来开发,程序员处理Windows消息。经历过这段开发时期的程序员一般对底层比较清楚,要了解Windows操作系统的工作原理。

MFC && C++ - Microsoft Foundation Class(MFC),微软用C++封装了Win32 API, C++程序员通过使用MFC类库来开发,面向对象的编程方法。

后来,随着.Net平台的壮大和发展,微软为了简化开发门槛,把Windows API封装成了控件,诞生了我们今天要说的Windows窗体(Windows Form)这项技术,并且搭配全新的C#语言使用。

但是,随着应用的复杂话,微软也意识到了WinForm的一些弊端,于是从.Net Framework 3.0开始,推出了能支持MVVM模式,并靠数据驱动界面的新框架WPF(Windows Presentation Foundation),相较于前辈的消息驱动、事件驱动模式,基于数据驱动的开发方式大大提高了编程效率,也更利于多工种和团队协作。

虽然,后续伴随着Windows 10发布了全新的UWP、Windows 11发布了WinUI、MAUI等框架,但是都是继续建立在数据驱动的开发思想上的。

到了2021年了,随着.Net Core的发展和生态需要,微软回头来,让WinForm这么一门较老的客户端窗体框架,老树发芽,唤来新生,大概是从.Net Core 3.1开始,WinForm正式被纳入.Net Core支持的范畴。

所以,今天的角度来看WinForms,其实际上具备两个实现版本:

1. 托管于GitHub上的开放源代码实现。

https://github.com/dotnet/winforms

此版本在.NET 5.NET Core 3.1上运行。Windows窗体可视化设计器最低要求Visual Studio 2019版本16.8预览版。

2. 受Visual Studio 2019和Visual Studio 2017支持的.NET Framework 4实现。

.NET Framework 4是仅限Windows的.NET版本,被视为一个Windows操作系统组件。此版本的Windows窗体随.NET Framework一起分发。

创建WinForms应用

https://github.com/TaylorShi/HelloWinForm

基于命令行的创建

1. 新建名为HelloWinForm的解决方案

dotnet new sln -o HelloWinForm

2. 切换到HelloWinForm目录

cd .\HelloWinForm\

3. 创建名为demoForWinForm的WinFroms项目

dotnet new winforms -o demoForWinForm

4. 添加demoForWinForm到解决方案

dotnet sln add .\demoForWinForm\demoForWinForm.csproj

5. 切换到demoForWinForm目录

cd .\demoForWinForm\

6. 运行demoForWinForm项目

dotnet watch run

7. 查看运行效果

8. 检查demoForWinForm.csproj配置

<Project Sdk="Microsoft.NET.Sdk"><PropertyGroup><OutputType>WinExe</OutputType><TargetFramework>net6.0-windows</TargetFramework><Nullable>enable</Nullable><UseWindowsForms>true</UseWindowsForms></PropertyGroup></Project>

基于Visual Studio的创建

1. 打开Visual Studio创建新项目

2. 搜索WinForms项目模板

这里可以看到Windows窗体应用(.Net Framework)就是.Net Framework框架的项目模板,而Windows Form App就是.Net Core框架的项目模板。

3. 选择Windows Form App项目模板进行创建配置,配置项目名为HelloWinForm

4. 选择Framework版本,暂时选择默认的.Net 5.0预览

5. 创建并打开解决方案

6. 运行项目并查看效果

7. 检查HelloWinForm.csproj配置

<Project Sdk="Microsoft.NET.Sdk"><PropertyGroup><OutputType>WinExe</OutputType><TargetFramework>net6.0-windows</TargetFramework><Nullable>enable</Nullable><UseWindowsForms>true</UseWindowsForms></PropertyGroup></Project>

参考

  • Windows 窗体文档

  • 桌面指南(Windows 窗体 .NET)

  • 教程:创建新的 WinForms 应用(Windows 窗体 .NET)

  • .NET Core 3.0 和 3.1 的 Windows 窗体中断性变更

  • 使用.net core3.0 正式版创建Winform程序

  • Introducing .NET Core (2021) by Microsoft.NET

  • WPF的由来

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/298296.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

a 寻路算法 java_A*(也叫A star, A星)寻路算法Java版 | 学步园

寻路首先要理解什么是A*寻路算法&#xff0c;可以参考这三篇文章&#xff1a;下面为测试地图&#xff0c;0表示可以通行&#xff0c;1表示障碍物&#xff1a;要从点(5, 1)到点(5, 5)&#xff0c;通过A*寻路算法找到以路径为所示&#xff1a;在代码中可以修改障碍物&#xff0c;…

看到喜欢的人时的心跳​

1 第一次和女孩子约会的猫咪.......好羞涩啊2 我要吃蛋糕&#xff01;不给买我就不走了~3 感觉自己活得都没小螃蟹精致4 完美的过程5 漫画真人6 哈哈哈哈哈哈真实合理慌的一批7 人最大的烦恼就是记性太好&#xff01;你点的每个赞&#xff0c;我都认真当成了喜欢

ARM公版架构迭代迅速 国产ARM架构落伍

近年来&#xff0c;ARM CPU性能可谓是突飞猛进&#xff0c;根据ARM官方消息&#xff0c;Cortex A78 CPU最高性能比5年前推出的Cortex A73 CPU提升2.5倍。ARM下一代的Matterhorn架构及Makalu架构会相对于X1/A78这一代保持30%以上的IPC性能提升&#xff0c;如果ARM的PPT不注水&am…

java 匿名初始化_关于java匿名内部类初始化法

最近无意间发现一种对象的初始化方法&#xff1a;匿名内部类初始化法List list new ArrayList(){{add("爱飘de小子");add("flyingkid");}};Map map new HashMap(){{put("name","爱飘de小子");put("age",24);}};还有这种操…

MemoryCache 使用不当导致的一个 BUG

MemoryCache 使用不当导致的一个 BUGIntro前几天发现代码里的一个 BUG&#xff0c;原因是 MemoryCache 使用不当&#xff0c;可以对于很多人来说可能都知道&#xff0c;但还是想分享记录一下&#xff0c;避免以后写出同样的 BUGSample直接来看下面的示例吧await using var serv…

22岁少年破解史上最严重网络攻击,拯救全球互联网,三个月后却被FBI逮捕

转自&#xff1a;大数据文摘编译&#xff1a;牛婉杨2017年&#xff0c;一位名叫Marcus Hutchins的少年从有史以来最严重的网络攻击事件“WannaCry 勒索病毒”中拯救了互联网。如果你是个geek&#xff0c;那么你对WannaCry这个名字一定不陌生&#xff0c; 这是一种可以自行传播的…

使用 Git Extensions 简单入门 Git

使用 Git Extensions 简单入门 Git—— 独立观察员 2015.11.25前言关于这个主题&#xff0c;之前我录了段视频教程&#xff0c;在本地看清晰度还可以&#xff0c;但传到优酷上就很不清晰了&#xff0c;即使是后来重制后还是一样不清晰&#xff0c;所以现在想整理成文字版。当然…

各省地图都像些什么?

全世界只有3.14 % 的人关注了爆炸吧知识人们常说中国地图的形状像一只雄鸡&#xff0c;但具体到每一个省区则并没有一个明确的说法。看看下面这一套省区地图对应的有趣的想象&#xff0c;你觉得像还是不像&#xff1f;★安徽有人说安徽像一只斜倒挂着的蝙蝠&#xff0c;你能看出…

Silverlight中摄像头的运用—part2

Silverlight 4 中摄像头的运用—part1将跟踪颜色视作输入 好了&#xff0c;我们能够跟踪到这个颜色了&#xff0c;那这么做的意义是什么呢&#xff1f;实际上&#xff0c;我们可以根据它的位置来移动东西。接下来的例子中&#xff0c;创建的一个球会跟随这个颜色一起移动。你可…

同学,解决下这个 Bug!

一些解决 Bug 的小技巧大家好&#xff0c;我是鱼皮。学编程的过程中&#xff0c;我们会遇到各式各样的 Bug&#xff0c;也常常因为它们而感到头秃。但随着你不断解决 Bug、积累经验&#xff0c;就会发现其实解决 Bug 也是有套路的。今天分享下鱼皮自己总结的解决 Bug 套路&…

如果给你一个亿,你想去干嘛?各专业的科研狗是这样回答的……

全世界只有3.14 % 的人关注了爆炸吧知识“如果现在给你一个亿&#xff0c;你想去做什么&#xff1f;”每天都被穷醒的小天一看到&#xff0c;立马展开了丰富的想象力&#xff1a;首先&#xff0c;当然少不了买买买&#xff0c;将一切之前想要的、不想要的&#xff0c;贵的、更贵…

头文件定义全局变量_5.2 C++局部变量与全局变量 | 输出局部全局变量

C局部变量C局部变量是指&#xff1a;在一个函数内部定义的变量&#xff0c;它只在本函数范围内有效&#xff0c;也就是说只有在本函数内才能使用它&#xff0c;在此函数以外是不能使用这些变量的。同样&#xff0c;在复合语句中定义的变量只在本复合语句范围内有效&#xff0c;…

java float转换成long_在Java中如何将float转换为long或int数据类型?

float f1.2f;double dDouble.parseDouble(String.valueOf(f));System.out.println(d);直接转换会设计到精度问题&#xff0c;所以需要借助字符串 保证不丢失数据www.shufadashi.com防采集。楼主您好&#xff0c;如果float是个整数&#xff0c;强制转换即可&#xff0c;可以捕捉…

Spark 1.2 发布,开源集群计算系统

2019独角兽企业重金招聘Python工程师标准>>> Spark 1.2 发布&#xff0c;此版本包括 172 位贡献者和超过 1000 个 commits。 此版本包括 Spark 核心操作和性能改进&#xff1b;添加新的网络传输子系统&#xff0c;进行了较大的改进&#xff1b;Spark SQL 引入了一个…

[转载].SSRAM、SDRAM和Flash简要介绍

转CalmBright兄的博文&#xff1a;http://www.cnblogs.com/CalmBright/archive/2009/07/19/1526569.html Abstract 在用NIos II 调试sdram遇到了其容量计算的问题&#xff0c;现介绍如下 Introduction 问题1&#xff1a;什么是DRAM、SRAM、SDRAM&#xff1f; 答&#xff1a;名词…

调整 Docker 中 nginx 的日志级别

调整 Docker 中 nginx 的日志级别Intro最近发现我们的一个应用产生了很多日志&#xff0c;而这些日志大多都是 nginx 的 access_log&#xff0c;我们默认会把标准输出收集到 es 里分析应用日志&#xff0c;但是很多都是 access_log 就可能会掩盖掉真实的错误日志&#xff0c;所…

Oracle B-Tree Index 原理

一. B-Tree Index 原理 官网说明&#xff1a; No index structure can satisfy all needs, but the self-balancing B-tree index comes closest to optimizing the performance of searches on large sets of data. Each B-tree node holds multiple keys and pointers. The m…

曾改变世界的最强科学,为什么我们对它的误解却越来越多?

古往今来&#xff0c;我们评价一个人有学识&#xff0c;总是形容&#xff1a;“上知天文下知地理”。也会要求一个人“读万卷书&#xff0c;行万里路”。美国认知心理学家Nora S. Newcombe认为&#xff1a;孩子常常看地图、爱看地图&#xff0c;能提高他们的空间想象力&#xf…

多线程环境下,程序真是危机四伏

姿势在不断的更新迭代&#xff0c; 太卷了。你管这也叫线程安全&#xff1f;最近大意了&#xff0c;竟然想将《面试官&#xff1a;实现一个带值变更通知能力的Dictionary》一文中的临界锁只应用到写操作。内心旁白&#xff1a;读操作又不会修改数据&#xff0c;无论是新值还是旧…

眼见不一定为实!18个神奇的视错觉,看完不相信眼睛系列

全世界只有3.14 % 的人关注了爆炸吧知识来源&#xff1a;普象工业设计小站在家长时间网上冲浪总有时候感觉眼睛出了毛病不信&#xff0c;你看为啥这个明明是个三棱锥怎么突然变成了正方体我是“瞎”了么啊啊啊啊后来&#xff0c;去找了资料才发现这原来是一家幻觉博物馆的展品玩…