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

Posted dotNET跨平台

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了温故知新,.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的由来

以上是关于温故知新,.Net Core遇见WinForms客户端窗体框架,在DotNet Core大一统基础上老树发芽...的主要内容,如果未能解决你的问题,请参考以下文章

温故知新,.Net Core遇见Postman(API Development),进阶分布式微服务高效调式

工具条 WinForms .Net Core 的问题

Microsoft.ReportViewer.WinForms.V15 与 .NET Core 3.1 不兼容 - 如何在 WPF Core 中显示 RDLC?

适用于 .Net Core 3.1 的 Visual Studio 2019 中的 WinForms 设计器窗口

NET Core 3.1 WinForms Designer 与 WPF 用户控件不兼容

温故知新,CSharp遇见异步编程(Async/Await),聊聊异步编程最佳做法