一招教你如何使用.Net Core 3.0正式版建立Winform程式
前陣子一直期待.net core3.0正式版本的出來,以為這個版本出來,Winform程式又迎來一次新生了,不過9.23日出來的馬上下載更新VS,建立新的.net core Winform專案,發現並沒有Winform窗體設計器。而微軟目前則是透過外掛的方式,讓我們單獨下載Winform設計器,這個設計器還是預覽版本,很多功能還是沒有實現的,只能算是一個簡單的雛形,本文案例介紹基於.net core3.0建立一個普通的WInform程式,讓大家瞭解下基於.net core3.0建立的程式的大概模樣。
一、開發環境的準備要做基於.net core3.0的WInform開發,需要首先更新你的Visual Studio到16.3,這個版本是整合.net core3.0的,因此也是能夠開發.net core Winform程式的基礎。
其次是下載winforms-designer外掛,這個是支援對Winform窗體的設計器,讓我們可以透過拖動控制元件的方式進行介面的設計開發。
.NET Core Windows Forms 視覺化設計器在將來一定是未來的Visual Studio 2019更新的一部分,但目前來說,想要視覺化設計器,需要一個預釋出的Visual Studio擴充套件。
完成這兩個步驟,其他開發就和我們普通建立VS專案一樣的。
建立專案後,我們可以開啟對應的Winform窗體,並可以在工具箱裡面看到一些Winform介面控制元件,好的是控制元件的大概和以前差不多,不好的事情是少了很多常規Winform控制元件,這個也是目前WInform 設計器處於開發預覽版的原因所在吧。
為了建立一個簡單測試的WInform程式,我們可以往裡面新增一些WInform的介面控制元件,不過使用過程中,發現很多介面所需元素沒有提供介面控制元件的支援,包括工具欄、屬性裡面都還不完善,如ImageList物件和Image物件的屬性支援等,我們只能透過程式碼的方式進行使用。
建立一個簡單的WInform介面,拖動了一些常規的控制元件,但是一些控制元件需要使用圖片的,如ListView、PictureBox等這些,需要透過程式碼設定(無法透過屬性加入的方式指定圖片)
最後介面展示效果如下所示:
窗體原始碼如下所示:
publicpartialclassForm1 : Form
{
publicForm1()
{
InitializeComponent();
}
privatevoidbutton1_Click(object sender, EventArgs e)
{
MessageBox.Show("你好,這是一個.net core的Winform程式", "提示資訊",
MessageBoxButtons.OK, MessageBoxIcon.Information | MessageBoxIcon.Asterisk);
}
private ImageList imageList = new ImageList();
privatevoidForm1_Load(object sender, EventArgs e)
{
var image = Image.FromFile(Path.Combine(Application.StartupPath, "SplashScreen.png"));
if(image != null)
{
this.pictureBox1.Image = image;
}
imageList.Images.Clear();
var iconPath = Path.Combine(Application.StartupPath, "icons");
var fileNames = Directory.GetFiles(iconPath, "*.ico");
foreach(string file in fileNames)
{
imageList.Images.Add(file, Image.FromFile(file));
}
this.treeView1.ImageList = imageList;
foreach(TreeNode node inthis.treeView1.Nodes)
{
SetNodeImage(node);
}
this.button1.Image = imageList.Images[2];
}
privatevoidSetNodeImage(TreeNode node)
{
foreach (TreeNode subNode in node.Nodes)
{
subNode.ImageIndex = subNode.Level;
subNode.SelectedImageIndex = subNode.Level;
SetNodeImage(subNode);
}
}
從中我們可以看到,.net core下的WInform程式,它的窗體元素或者相關物件,沒有發生不一致命名的情況,用起來還是非常方便一致的,不過就是對應很多介面的功能,目前只能通過後臺程式碼的方式進行補充,才能實現一個比較完整的效果,和.net Framework框架下已經完善的非常好的Winform開發,真的是差距不是一點半點,看來.net core winform開發的路還是很漫長,需要在工具層面更多的支援才行。
介面方案裡面,我們看到名稱空間也比以前少了很多了了。主要還是基於.net core 提供的WInform包。
我們再來看看程式目錄下的檔案如下所示:
由於目前我們還沒有考慮第三方的.net core 層面的類庫,因此這裡沒有使用第三方的DLL,以後整合的話,第三方相關的引用也是一個非常頭大的問題,如果大多數常用的類庫都有基於.net standard 的類庫支援,那倒是好,否則可能會面臨兩難的抉擇,不過.net core的Winform開發我覺得還是很值得期待的,畢竟引入一個整體的.net core開發路線,對企業或者個人來說,都是一個非常不錯的開發場景。