使用.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开发路线,对企业或者我的来讲,都是一个很是不错的开发场景。

相关文章
相关标签/搜索