以下方法来自于微软github开源项目WinForms:
dotnet/winforms - Using the Classic WinForms Designer in WinForms Core, 请放心使用 .
目前.net core下的 Windows Forms的可视化设计器(Designer)尚不可用,后续的Visual Studio 2019 Update才会支持该部分的功能。不过目前我们想在vs2019中使用 Designer,有一种临时解决方法。
可以使用Visual Studio来处理链接文件(Link files)的功能,并将其WinForms Designer用于Classic Framework (即.net Framework的Win Forms项目)。
具体的解决方法是在同一个 Solution
下创建两个项目:
- 用于设计WinForms应用程序的.NET Framework应用程序(.net core项目)
- 用于运行WinForms应用程序的.NET Core应用程序(.net Framework 项目)
而两个应用程序(.net core项目和相应.net Framework 项目)都将引用相同的文件。
在该方法中,只要添加新的Win Form
或新的UserControl
,就需要在Classic Framework WinForms
项目(.net Framework的Win Forms项目)中重新设置Form
文件的嵌套层级关系,推荐使用Mad Kristensen的文件嵌套扩展来完成这件事,而不是使用文本编辑器来修补项目文件(.csproj
文件),建议事先安装好该vs
插件。
完整步骤:
安装 vs 2019 professional/enterprise版本#
先安装 vs 2019 professional/enterprise版本,安装好.net core 3.0 SDK,此时试着创建一个.net core下的 win forms 应用,
![4624570-fff277cb5c7c02ff.png](https://i-blog.csdnimg.cn/blog_migrate/ec0a7f47e7f060bf0e847000da1b4fdd.webp?x-image-process=image/format,png)
设置好相关项目名和存放路径后,会弹出:
![4624570-42dc6ba2ca6f9875.png](https://i-blog.csdnimg.cn/blog_migrate/afdcaa37394f299f981180c5861caa6a.webp?x-image-process=image/format,png)
在vs的设置里,勾选.NET core下的"Use preview SDK"#
![4624570-64445f6ef4669d04.jpg](https://i-blog.csdnimg.cn/blog_migrate/04e6ecdf8912ac13ec5ef17dc58528b5.webp?x-image-process=image/format,png)
设置完,重启vs才能生效。
使用vs自带的模板,选择其中的 .net core forms 创建Project, 取名为"CoreHelloForm"#
![4624570-2fc78a9a59fa0228.png](https://i-blog.csdnimg.cn/blog_migrate/18a7d076739be2d273c8f3e51111c3ae.webp?x-image-process=image/format,png)
![4624570-18bf0f236454d7aa.png](https://i-blog.csdnimg.cn/blog_migrate/3c6ecd47f72e7030e1aed94af8f50707.webp?x-image-process=image/format,png)
此时的文件目录为:
![4624570-c5318f8d8f8008a9.png](https://i-blog.csdnimg.cn/blog_migrate/d482caf38ff2de0607b3fb11e95baa85.webp?x-image-process=image/format,png)
在刚创建的Solution中使用vs自带的模板,选择其中的.net framework forms添加新的project,取名为"CoreHelloForm.Designer"#
![4624570-74b2eb2ff73f23eb.png](https://i-blog.csdnimg.cn/blog_migrate/955c2574a9b772dbd033efc2f8d9dae2.webp?x-image-process=image/format,png)
![4624570-6ff07d8dcde2dc44.png](https://i-blog.csdnimg.cn/blog_migrate/bfc276c38bc680a3ad70c1bc6d3d6acb.webp?x-image-process=image/format,png)
![4624570-d6743ca9f02e80de.png](https://i-blog.csdnimg.cn/blog_migrate/1a02179d47709232fc7b5f006d875845.webp?x-image-process=image/format,png)
此时Solution
中的文件目录为:
![4624570-5c8c2cee9eae6e87.png](https://i-blog.csdnimg.cn/blog_migrate/d50fac84666949216f7392d3b941a388.webp?x-image-process=image/format,png)
将.net core form下的Form1 重命名为 MainForm#
![4624570-8255bfb2b9e371ac.gif](https://i-blog.csdnimg.cn/blog_migrate/353538036647bc694d078c10344785ad.webp?x-image-process=image/format,png)
![4624570-65bfeceb992245ae.gif](https://i-blog.csdnimg.cn/blog_migrate/0010361986f9417664d3d675eddfb128.webp?x-image-process=image/format,png)
此时,选中 .net core form项目,右键选择 “Set as start up project”,按F5运行项目,可看到窗体:
![4624570-d91f8006d793e0c8.png](https://i-blog.csdnimg.cn/blog_migrate/6558fe18229b2daa232bed7671c35604.webp?x-image-process=image/format,png)
然后点窗体右上角的x
关闭按钮,停止运行.
测试从命令行是否能正常 build .net core
项目#
右键 .net core form项目,点击"Open Folder in File Explorer",
![4624570-c5f0544fb3efa4d4.png](https://i-blog.csdnimg.cn/blog_migrate/c4cdc48b631ec32213070d7afbffbe8d.webp?x-image-process=image/format,png)
![4624570-d8e26026aa248cdc.png](https://i-blog.csdnimg.cn/blog_migrate/f367777636f298478e28ed178e178702.webp?x-image-process=image/format,png)
删除此处的bin
文件夹
在上方地址栏输入cmd
进入命令行:
![4624570-608a2b94c7dfa26f.png](https://i-blog.csdnimg.cn/blog_migrate/ae393cdbc8e520bcfb9a2f37ccd35a91.webp?x-image-process=image/format,png)
输入dotnet --version
,看是否能看到具体.net core版本,如果没问题,继续下面的步骤。
输入dotnet build
![4624570-27f2e82c4ba125c4.png](https://i-blog.csdnimg.cn/blog_migrate/e912188979f93b06213599a6f0170caf.webp?x-image-process=image/format,png)
此时,回到文件目录D:\Coding\csProj\CoreHelloForm\CoreHelloForm\bin\Debug\netcoreapp3.0
,双击其中的exe文件,窗体能正常打开。
![4624570-20a68ebd7931dcba.png](https://i-blog.csdnimg.cn/blog_migrate/6f84fbd8db1a315514fa57ddcc6255fe.webp?x-image-process=image/format,png)
删除项目CoreHelloForm.Designer
中所有Form1相关的文件#
接着选中.net framework
项目CoreHelloForm.Designer
下的Form1
,右键点击"Delete",
![4624570-4acefbd886da29f5.png](https://i-blog.csdnimg.cn/blog_migrate/6e27101294d87cf8dc5d9fde0a1137d1.webp?x-image-process=image/format,png)
会出现下面这个警告框,点OK
。
在项目`CoreHelloForm.Designer中以"As Link"的方式引用.net core form项目下的MainForm相关文件#
选中项目CoreHelloForm.Designer
,右键Add,选"Existing Item"
![4624570-7232b59a825540f9.png](https://i-blog.csdnimg.cn/blog_migrate/4971970f79d134ecad50f925816553b2.webp?x-image-process=image/format,png)
打开文件选择框之后,选择.net core项目CoreHelloForm
下的下图中高亮的3个文件.
![4624570-d2bcc2a2fcf7c485.png](https://i-blog.csdnimg.cn/blog_migrate/90cc8dcb45add7ae7eae77df0db3ffce.webp?x-image-process=image/format,png)
点击Add As Link
。
从Extension market下载并安装扩展 File Nesting#
下载地址: File Nesting for VS
下载到的文件是File_Nesting_v2.6.85.vsix
, 关闭vs,双击,勾选上相应版本的vs安装即可~
![4624570-8add27b442f45a12.png](https://i-blog.csdnimg.cn/blog_migrate/4feb6c6b7f087f3c29e05a3054b9c831.webp?x-image-process=image/format,png)
使用 File Nesting来修改 Link 的 MainForm相关文件的层次关系.#
先选中文件MainForm.Designer.cs
和MainForm.resx
,然后右键点击 "File Nesting" -> "Auto-nest selected items"
![4624570-8a214632ef803e1a.png](https://i-blog.csdnimg.cn/blog_migrate/9851994a4cab9d62cc93601dd227d694.webp?x-image-process=image/format,png)
再右键点击 "File Nesting" -> "Nest item",选择 MainForm
![4624570-b685544202dd0982.png](https://i-blog.csdnimg.cn/blog_migrate/972f0776ae5c8b4ec986fbb06fe960d6.webp?x-image-process=image/format,png)
点 OK
继续.
再进行一次重命名#
将.Designer
项目下的Program.cs
中的Form1
改为MainForm
.
![4624570-45fa770fe0248889.gif](https://i-blog.csdnimg.cn/blog_migrate/f1d2d952846cf65debccadd5c211ada6.webp?x-image-process=image/format,png)
重设启动项项目#
选中项目CoreHelloForm.Designer,右键 Rebuild, 选中.net framework项目CoreHelloForm.Designer,右键选择 “Set as start up project”.
关闭 Solution中 项目CoreHelloForm.Designer中MainForm
的干扰文件#
此时,如果试着双击项目CoreHelloForm.Designer中的MainForm.cs
,会弹出如下警告。
![4624570-f75458571874a049.png](https://i-blog.csdnimg.cn/blog_migrate/7d22be0555b879e685457a2063bbb21c.webp?x-image-process=image/format,png)
那是因为项目CoreHelloForm.Designer中的MainForm.cs
所Link 的与MainForm相关的文件已经在 项目CoreHelloForm 中 打开。
我们将已打开的文件中与项目CoreHelloForm.Designer
中Form相关的文件都关闭掉,比如:
![4624570-1c6b272ba8fcea6c.png](https://i-blog.csdnimg.cn/blog_migrate/b312ead8b121b0ca632e791081feef13.webp?x-image-process=image/format,png)
试用 Designer#
现在,再双击项目CoreHelloForm.Designer中的MainForm.cs
,就能看到 Designer 了。
![4624570-8cacaf472d6ba8b8.png](https://i-blog.csdnimg.cn/blog_migrate/0e26657fe419befbab6d3127a37bfed0.webp?x-image-process=image/format,png)
此时,可以进行可视化编辑了。
比如,我做了如下几处修改:
- 改掉 Form的 Title
![4624570-d917e90b4487aed1.png](https://i-blog.csdnimg.cn/blog_migrate/223a64f12a8885238a93d4e9a8203027.webp?x-image-process=image/format,png)
- 改掉文本框的内容.
![4624570-cda88a9cab9cf704.png](https://i-blog.csdnimg.cn/blog_migrate/f75e8f9f844dbed76ea9baf0d49f9c21.webp?x-image-process=image/format,png)
- 改掉窗体的图标(icon)
![4624570-cc4a1860a5c49ae4.png](https://i-blog.csdnimg.cn/blog_migrate/bb17b21a5f27b707c340025f88a6689c.webp?x-image-process=image/format,png)
按F5
,运行的效果图为:
![4624570-e300df0d48c79a86.png](https://i-blog.csdnimg.cn/blog_migrate/03562a852bccad13a58a44ab56ce4d4d.webp?x-image-process=image/format,png)
项目代码已推到github
,欢迎Fork
和star
.
传送门: .netCore-WinForms_Designer , 如果觉得自己配置起来麻烦,也可以 clone 下来自己体验一把喔~
解决vs2019中暂时无法为.net core WinForms使用 Designer 的临时方法#