WinForm窗体应用程序学习笔记(一)

由于控制台应用程序的运行结果都是通过控制台输出的,不能提供良好的用户体验,为此,C#提供了WinForm窗体应用程序。WinForm具有一系列丰富的控件,用于创建基于Windows的应用程序。每一个控件模型都相当于一个类,通过继承和扩展这些控件类来使Windows界面变的更加好看、更加具有交互性。

友情链接:


WinForm项目的文件结构

我们首先打开VS新建项目,创建Windows桌面窗体应用程序:

修改完程序名称点击右下角确定即创建了一个WinForm程序,然后我们看VS界面最右边的“解决方案资源管理器”,这里面显示了WinForm的文件结构:

从上图中可以看到WinForm项目的文件包括五个部分:

  • Properties : 设置项目属性
  • 引用 :设置对其他项目命名空间的引用
  • App.config :设置数据库的配置信息
  • Form1.cs :设置窗体界面以及编写逻辑代码
  • Program.cs :设置项目运行时的主窗体

深入了解Form1.cs和Program.cs两个文件的作用

1)Form1.cs 由Form1.cs[设计]界面Form1.cs逻辑代码两部分构成

a . Form1.cs[设计]界面:

以上gif图演示了 设计界面 的使用方法,即用户可以通过拖动工具箱中的控件对窗体界面进行设计

b . Form1.cs逻辑代码:

逻辑代码部分为了与用户之间做交互。

c . Form1.Designer.cs文件:

用于在窗体类中自动生成控件的初始化代码,例如我们刚刚将Button按钮拖拽到From1.cs窗体上,在这个文件中会自动生成一段代码。如下图所示:

d . Form1.resx文件:

用于资源导入,通过该文件导入资源,无需引用外部文件。

2)Program.cs文件

是WinForm程序的主入口,如下图所示:

控件的常用属性和事件

在C#中,所有的控件都直接或间接继承自Control类,Control类中提供了许多属性,这些属性都是控件的共同特征,具体如下表所示:

Control类的常用属性
属性说明
Name指示代码中用来标识该对象的名称
Text

与控件关联的文本

Visible确定该控件是可见的还是隐藏的
BackColor该控件的背景颜色
Cursor指针移过该控件时显示的光标
Dock定义要绑定到容器的控件边框
Enable指示是否启用该控件
Font用于显示控件中文本的字体
ForeColor此控件的前景色,用于显示文本
Size控件的大小
Tag与对象关联的用户定义数据
TextAlign将在控件上显示的文本的对齐方式

在Control类中,除了定义属性,还定义事件根据用户的操作引发相应的事件,开发人员可以根据不同的事件来编写具体的处理方法。具体如下表所示:

Control类的常用事件
事件说明
Load窗体加载时被触发
Click单击控件时发生
MouseEnter在鼠标进入控件的可见部分时发生
MouseLeave在鼠标离开控件可见部分时发生
BackColorChanged在控件的BackColor属性值更改时引发的事件
FontChanged在控件的Font属性值更改时引发的事件

创建第一个WinForm应用程序!

成品效果:

创建项目过程上文中有写,这里不再贴出……

所以直接从“向窗体中添加控件”开始,在工具箱里面找到“Label”文本标签与Button按钮,拖入Form1.cs[设计]页面。如下图所示:

然后点击F4调开属性,设置Label的属性,将其Name属性改为“IbInfo”,Text属性设置为“如果你点到我,游戏就结束了”,如下图所示:属性在右下角!

 同样的,将Button按钮的Name属性设置为“btnMe”,Text属性设置为“你点得到我?”,如下图所示:

这些属性设置完成之后,接着来实现一下控件事件的响应方法,点击【属性】窗口的“类似闪电”图标的按钮,默认情况下,Button按钮的“Click”事件会被选中。我们希望当鼠标移动至按钮上时,按钮立即变换自己的位置,所以在这里我们选中MouseEnter,双击一下啊;然后我们希望点到按钮之后,立即退出程序,所以我们选中MouseClick,双击一下。之后我们会发现Form1.cs文件中多了两个“方法”!如下图所示:

现在看到的btnMe_MouseClick()与btnMe_MouseEnter()都是空方法。为了让控件能够响应用户操作,我们在这个文件中完善一下方法代码:

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 first
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        //鼠标进入按钮显示界面时,执行此方法
        private void btnMe_MouseEnter(object sender,EventArgs e)
        {
            //产生随机数
            Random r = new Random();
            //为Left属性赋值,该属性表示控件左边缘与容器左边缘的距离
            btnMe.Left = r.Next(0, this.Width - btnMe.Width - 5);
            //返回一个指定范围内随机数,并赋值给btnMe对象的Top属性
            btnMe.Top = r.Next(0, this.Height - btnMe.Height - 5);
        }  

        private void btnMe_MouseClick(object sender, MouseEventArgs e)
        {
            this.Close();
        }
    }
}

至此,我们的WinForm简单小程序已经制作完成!

程序bug:随机数稍有不甚,按钮会越出窗口~


部分内容参考自《C#程序设计基础入门教程》——传智播客高教产品研发部

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐