专栏首页人脸识别温故而知新C#学习系列文章之Windows窗体应用程序003
原创

C#学习系列文章之Windows窗体应用程序003

背景

紧接着上一篇文章,我已经学习了控制台的使用,以及创建不同应用的Helloworld程序,这一篇文章,我介绍Windows窗体应用程序的简单实用,按照调用流程一步一步的操作,希望能帮助初学者也能一步一步的搭建起自己的第一个应用。由于本人水平有限,文章中难免有介绍不足的地方,敬请谅解。

操作步骤

首先,打开vs2017--》新建--》项目--》点击确定:

创建项目

然后,项目已经创建成功了,截图如下:

项目创建成功

其中,白色面板部分就是我们所创建的项目的初始界面,我们可以点击运行项目,红色框柱的部分就是我们运行出来的桌面应用的界面。

初始程序运行

上面运行成功的是一个空白的界面,在后面,会介绍如何创建我们想要的应用。

主程序的入口

主程序的代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApp4
{
    static class Program
    {
        /// <summary>
        /// 应用程序的主入口点。
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
    }
}

工具箱熟悉

点击左侧的工具箱,我们可以添加我们想要的控件,可以拖动到面板上,面板上的布局需要自行设计。

工具箱有以下的类型:

  • 公共控件
  • 容器
  • 菜单和工具栏
  • 数据
  • 组件
  • 打印
  • 对话框
  • WPF互操作性
  • 常规
工具箱概览

每一个工具箱里的控件比较多,可以依次使用每个控件,知道有什么控件可用。

工具箱

如何添加控件

有这么多的控件,我们如何添加自己需要的控件呢?就是拖动到面板上就可以了,操作如下图:

添加按钮

添加了两个按钮,双击按钮我们可以进入控件的方法体代码部分,截图如下:

按钮的工程目录

双击工程目录被控住的部分,我们就跳转到描述控件信息的代码:

原始代码详情解读:

namespace WindowsFormsApp4
{
    partial class Form1
    {
        /// <summary>
        /// 必需的设计器变量。
        /// </summary>
        private System.ComponentModel.IContainer components = null;

        /// <summary>
        /// 清理所有正在使用的资源。
        /// </summary>
        /// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }

        #region Windows 窗体设计器生成的代码

        /// <summary>
        /// 设计器支持所需的方法 - 不要修改
        /// 使用代码编辑器修改此方法的内容。
        /// </summary>
        private void InitializeComponent()
        {
            this.button1 = new System.Windows.Forms.Button();
            this.button2 = new System.Windows.Forms.Button();
            this.SuspendLayout();
            // 
            // button1
            // 
            this.button1.Location = new System.Drawing.Point(311, 55);
            this.button1.Name = "button1";
            this.button1.Size = new System.Drawing.Size(109, 45);
            this.button1.TabIndex = 0;
            this.button1.Text = "button1";
            this.button1.UseVisualStyleBackColor = true;
            this.button1.Click += new System.EventHandler(this.button1_Click);
            // 
            // button2
            // 
            this.button2.Location = new System.Drawing.Point(311, 171);
            this.button2.Name = "button2";
            this.button2.Size = new System.Drawing.Size(109, 41);
            this.button2.TabIndex = 1;
            this.button2.Text = "button2";
            this.button2.UseVisualStyleBackColor = true;
            this.button2.Click += new System.EventHandler(this.button2_Click);
            // 
            // Form1
            // 
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.ClientSize = new System.Drawing.Size(800, 450);
            this.Controls.Add(this.button2);
            this.Controls.Add(this.button1);
            this.Name = "Form1";
            this.Text = "Form1";
            this.ResumeLayout(false);

        }

        #endregion

        private System.Windows.Forms.Button button1;
        private System.Windows.Forms.Button button2;
    }
}

其中,我们来看一下button1的信息设置,我们可以通过设置部分的代码设置按钮的基本属性。

// button1
            // 
            this.button1.Location = new System.Drawing.Point(311, 55);//按钮位置信息
            this.button1.Name = "button1";//按钮名称
            this.button1.Size = new System.Drawing.Size(109, 45);//按钮的大小
            this.button1.TabIndex = 0;//按钮的索引
            this.button1.Text = "button1";//按钮上显示的名称
            this.button1.UseVisualStyleBackColor = true;
            this.button1.Click += new System.EventHandler(this.button1_Click);
            

以下是我从本地导入图片到PictureBox的截图,操作是右键单击PictureBox,然后点击选择图像,然后选择本地资源,点击确定,选择相应的图片就可以了。

添加图片

我们可以拖动窗口调整大小使得适应图片,也可以在属性里设置自动适应图片大小,截图如下。

添加图片

小结

在前面部分,我们分别介绍了如何创建项目,如何使用控件,以及源代码的简单剖析,在后面,我们将介绍一个打开和保存图片的实例,这样可以更深入的理解WindowsForm程序的工作原理。

完整的Windows 窗体应用程序打开和保存图片

具体的操作步骤如下:

1. 选择新建项目,选择Windows 窗体应用,并命名为showPicture。

创建showPicture的项目

2.从工具箱中拖动两个Button和一个PictureBox到面板上,并调整位置对齐为如下的设计:

3.拖动调整大小

4. 设计按钮

首先,右键单击按钮,然后选择属性,然后在右下角属性框设置名称为打开图片;同理,button2设置名称为保存图片。

修改按钮名字

然后,修改PictureBox的背景色

最后,修改结果如下

设计的结果

1、Picturebox控件SizeMode属性

(1)Normal模式:如果图片大于Picturebox控件大小,图片不能完全显示。

(2)AutoSize:自动调整Picturebox控件大小去适应图片的大小,图片可以完全显示。

(3)StretchImage:Picturebox控件大小不变,自动调整图像适应控件。

5. 添加代码

双击打开图片按钮,添加如下代码:

添加代码
    OpenFileDialog file = new OpenFileDialog();
            file.InitialDirectory = ".";
            file.Filter = "所有文件(*.*)|*.*";
            file.ShowDialog();
            if (file.FileName != string.Empty)
            {
                try
                {
                    pathname = file.FileName;   //获得文件的绝对路径
                    this.pictureBox1.Load(pathname);
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }

            }

双击保存图片按钮,跳转到按钮调用的代码,添加红框部分的代码:

保存图片的代码
SaveFileDialog save = new SaveFileDialog();
            save.ShowDialog();
            if(save.FileName!=string.Empty)
            {
                pictureBox1.Image.Save(save.FileName);
            }

完整的Form1的代码如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

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

        private string pathname = string.Empty;     		//定义路径名变量
        private void button1_Click(object sender, EventArgs e)
        {
            OpenFileDialog file = new OpenFileDialog();
            file.InitialDirectory = ".";
            file.Filter = "所有文件(*.*)|*.*";
            file.ShowDialog();
            if (file.FileName != string.Empty)
            {
                try
                {
                    pathname = file.FileName;   //获得文件的绝对路径
                    this.pictureBox1.Load(pathname);
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }

            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            SaveFileDialog save = new SaveFileDialog();
            save.ShowDialog();
            if(save.FileName!=string.Empty)
            {
                pictureBox1.Image.Save(save.FileName);
            }
        }
    }
}

然后,点击启动

弹出如下对话框之后,单击打开图片

选择图片结果如下图,PictureBox已经自适应图片的大小。

然后选择保存图片,设置名称

保存图片

然后就有了两张图片在文件夹中

总结

这就是一个简单的Windows窗体应用程序的使用介绍。有了这个基础之后,以后有可能可以通过这个应用,传入图片,调用我们的人脸识别产品的接口,去实现不同应用场景的需求。

完整应用

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

相关文章

  • 人脸识别接口使用笔记

    后付费有八个接口收费,其中人员库管理有多个子接口,仅创建人员和增加人脸收费,两个子接口的调用量合并计入人员库管理的计费。

    算法发
  • 人脸识别温故而知新专栏

    该专栏定位是围绕着人脸识别的技术原理,发展趋势和产品更新迭代来展开,希望能被你喜欢。

    算法发
  • C#学习笔记系列之HelloWorld入门001

    在我的工作中需要对C#的一些问题进行攻克,所以我需要学习C#,在此我也分享我的笔记,一方面能记录知识点,另一方面也可以丰富社区的文档。C#主要有三种应用,分别是...

    算法发
  • 用Qt写软件系列五:一个安全防护软件的制作(3)

    引言        上一篇中讲述了工具箱的添加。通过一个水平布局管理器,我们将一系列的工具按钮组合到了一起,完成了工具箱的编写。本文在前面的基础上实现窗体分割效...

    24K纯开源
  • (四十九)c#Winform自定义控件-下拉框(表格)

    GitHub:https://github.com/kwwwvagaa/NetWinformControl

    冰封一夏
  • js 数组去重 原

    (adsbygoogle = window.adsbygoogle || []).push({});

    tianyawhl
  • scrapy的简单使用

    py3study
  • WPF自学入门(十二)WPF MVVM模式提取函数

    我们平时在写代码时为了不重复写代码,会进行复制代码或者写通用方法。今天我们就来把上传做的函数提取成为通用的方法调用。把上次写的函数提取为两个主要的文...

    黄昏前黎明后
  • .NET自带IOC容器MEF之初体验

    本文主要把MEF作为一种IOC容器进行讲解,.net中可用的IOC容器非常多,如 CastleWindsor,Unity,Autofac,ObjectBuild...

    写代码的猿
  • (三十一)c#Winform自定义控件-文本框(四)

    GitHub:https://github.com/kwwwvagaa/NetWinformControl

    冰封一夏

扫码关注云+社区

领取腾讯云代金券