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

前陣子一直期待.net core3.0正式版本的出來,覺得這個版本出來,Winform程序又迎來一次新生了,不過9.23日出來的立刻下載更新VS,建立新的.net core Winform項目,發現並無Winform窗體設計器。而微軟目前則是經過插件的方式,讓咱們單獨下載Winform設計器,這個設計器仍是預覽版本,不少功能仍是沒有實現的,只能算是一個簡單的雛形,本博客案例介紹基於.net core3.0建立一個普通的WInform程序,讓你們瞭解下基於.net core3.0建立的程序的大概模樣。node

一、開發環境的準備

要作基於.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 設計器處於開發預覽版的緣由所在吧。this

 

二、建立一個WInform程序

爲了建立一個簡單測試的WInform程序,咱們能夠往裏面添加一些WInform的界面控件,不過使用過程當中,發現不少界面所需元素沒有提供界面控件的支持,包括工具欄、屬性裏面都還不完善,如ImageList對象和Image對象的屬性支持等,咱們只能經過代碼的方式進行使用。spa

我建立一個簡單的WInform界面,拖動了一些常規的控件,可是一些控件須要使用圖片的,如ListView、PictureBox等這些,須要經過代碼設置(沒法經過屬性加入的方式指定圖片).net

 

 

最後界面展現效果以下所示。插件

 

 窗體源碼以下所示。設計

   public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            MessageBox.Show("你好,這是一個.net core的Winform程序", "提示信息", 
                MessageBoxButtons.OK, MessageBoxIcon.Information | MessageBoxIcon.Asterisk);
        }

           
        private ImageList imageList = new ImageList();
        private void Form1_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 in this.treeView1.Nodes)
            {
                SetNodeImage(node);
            }

            this.button1.Image = imageList.Images[2];
        }

        private void SetNodeImage(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開發的路仍是很漫長,須要在工具層面更多的支持才行。3d

界面方案裏面,咱們看到命名空間也比之前少了不少了了。主要仍是基於.net core 提供的WInform包。

咱們再來看看程序目錄下的文件以下所示。

 

因爲目前咱們尚未考慮第三方的.net core 層面的類庫,所以這裏沒有使用第三方的DLL,之後整合的話,第三方相關的引用也是一個很是頭大的問題,若是大多數經常使用的類庫都有基於.net standard 的類庫支持,那卻是好,不然可能會面臨兩難的抉擇,不過.net core的Winform開發我以爲仍是很值得期待的,畢竟引入一個總體的.net core開發路線,對企業或者我的來講,都是一個很是不錯的開發場景。

相關文章
相關標籤/搜索