以下方法來自於微軟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 Framework 項目)
- 用於運行WinForms應用程序的.NET Core應用程序(.net core項目)
而兩個應用程序(.net core項目和相應.net Framework 項目)都將引用相同的文件。
此篇文章有關於WPF的姊妹篇解決VS2019中.net core WPF 暫時無法使用 Designer 的臨時方法 ,但對WPF而言實現起來比WinForms簡單很多。核心思想同樣是借殼~
在該方法中,只要添加新的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 應用,
設置好相關項目名和存放路徑后,會彈出:
下一步驟,勾選.NET core下的"Use preview SDK"
會解決這個問題。
當然也可使用命令行/Powershell來創建。
- 打開命令行/Powershell
- 使用cd命令,切換到自己平時存vs項目的路徑(比如我切換到
D:\Coding
) - 輸入命令
dotnet new winform --name "CoreFormDemo"
在vs的設置里,勾選.NET core下的"Use preview SDK"
設置完,重啟vs才能生效。
此時用vs打開剛才的Solution
即可。
使用vs自帶的模板,選擇其中的 .net core forms 創建Project, 取名為"CoreHelloForm"
此時的文件目錄為:
在剛創建的Solution中使用vs自帶的模板,選擇其中的.net framework forms添加新的project,取名為"CoreHelloForm.Designer"
此時Solution
中的文件目錄為:
將.net core form下的Form1 重命名為 MainForm
此時,選中 .net core form項目,右鍵選擇 “Set as start up project”,按F5運行項目,可看到窗體:
然后點窗體右上角的x
關閉按鈕,停止運行.
測試從命令行是否能正常 build .net core
項目
右鍵 .net core form項目,點擊"Open Folder in File Explorer",
刪除此處的bin
文件夾
在上方地址欄輸入cmd
進入命令行:
輸入dotnet --version
,看是否能看到具體.net core版本,如果沒問題,繼續下面的步驟。
輸入dotnet build
此時,回到文件目錄D:\Coding\csProj\CoreHelloForm\CoreHelloForm\bin\Debug\netcoreapp3.0
,雙擊其中的exe文件,窗體能正常打開。
刪除項目CoreHelloForm.Designer
中所有Form1相關的文件
接着選中.net framework
項目CoreHelloForm.Designer
下的Form1
,右鍵點擊"Delete",
會出現下面這個警告框,點OK
。
在項目`CoreHelloForm.Designer中以"As Link"的方式引用.net core form項目下的MainForm相關文件
選中項目CoreHelloForm.Designer
,右鍵Add,選"Existing Item"
打開文件選擇框之后,選擇.net core項目CoreHelloForm
下的下圖中高亮的3個文件.
點擊Add As Link
。
從Extension market下載並安裝擴展 File Nesting
下載地址: File Nesting for VS
下載到的文件是File_Nesting_v2.6.85.vsix
, 關閉vs,雙擊,勾選上相應版本的vs安裝即可~
使用 File Nesting來修改 Link 的 MainForm相關文件的層次關系.
先選中文件MainForm.Designer.cs
和MainForm.resx
,然后右鍵點擊 "File Nesting" -> "Auto-nest selected items"
再右鍵點擊 "File Nesting" -> "Nest item",選擇 MainForm
點 OK
繼續.
再進行一次重命名
將.Designer
項目下的Program.cs
中的Form1
改為MainForm
.
重設啟動項項目
選中項目CoreHelloForm.Designer,右鍵 Rebuild, 選中.net framework項目CoreHelloForm.Designer,右鍵選擇 “Set as start up project”.
關閉 Solution中 項目CoreHelloForm.Designer中MainForm
的干擾文件
此時,如果試着雙擊項目CoreHelloForm.Designer中的MainForm.cs
,會彈出如下警告。
那是因為項目CoreHelloForm.Designer中的MainForm.cs
所Link 的與MainForm相關的文件已經在 項目CoreHelloForm 中 打開。
我們將已打開的文件中與項目CoreHelloForm.Designer
中Form相關的文件都關閉掉,比如:
試用 Designer
現在,再雙擊項目CoreHelloForm.Designer中的MainForm.cs
,就能看到 Designer 了。
此時,可以進行可視化編輯了。
比如,我做了如下幾處修改:
- 改掉 Form的 Title
- 改掉文本框的內容.
- 改掉窗體的圖標(icon)
按F5
,運行的效果圖為: