C#编程基础(下)第二课:创建Windows应用程序的方法,窗体的基本属性和方法、基本控件的使用

版权声明:王迪 https://blog.csdn.net/dnruanjian/article/details/87917250

知识点:创建Windows应用程序的方法,窗体的基本属性和方法、基本控件的使用、事件处理、消息框的使用

1、创建windows应用程序的方法

         Windows应用程序是目前应用软的主流,用户使用方便且功能强大。所以掌握windows应用程序的开发是软件开发的必备技能。Windows应用程序由一个个窗体组成。

1.1  应用程序和windows应用程序

  • 应用程序:为满足用户不同领域、不同问题的应用需求而提供的那部分软件。比如办公程序软件word、Excel;多媒体软件如媒体播放器、图像软件ps、crd;互联网软件如浏览器、即时通讯QQ微信……

  • windows应用程序:计算机操作系统有很多,比如windows系统、UNIX系统、DOS系统……。顾名思义,应用在windows系统上的程序就是windows应用程序。

        应用程序有两种模式C/S、B/S。C/S是客户端/服务器端程序,也就是说这类程序一般独立运行。而B/S就是浏览器端/服务器端应用程序,这类应用程序一般借助IE等浏览器来运行。

相关概念理解

窗体:窗体是一种文档,可以用来收集信息。它包括两部分,一部分是由窗体设计者输入的,填写窗体的人无法更改的文字或图形。窗体设计者可以插入希望得到回答的问题、选项列表、信息表格等。另一部分是由窗体填写者输入的,用于从填写窗体者处收集信息并进行整理的空白区域。窗体设计者可以在文档中插入窗体域或 ActiveX 控件,为窗体填写者提供用于收集数据的位置。

1.2 创建Windows应用程序

使用Visual Studio创建,创建步骤和创建控制台程序类似,程序类型选择【Window 窗体应用(.NET Framework)

第一步:打开Visual Studio软件后,单击【文件】——【新建】——【项目】

第二步:在新建项目对话框中选择【Window 窗体应用(.NET Framework)】,设置项目名称等信息后,单击【确定】

第三步:在软件中对窗体进行设计

创建完项目后,在VisualStudio 2017开发环境中会有一个默认的窗体,可以通过工具箱向其中添加各种控件来设计窗体界面。

中间的方框就是我们需要设计和编写的窗体,默认名字是Form1,左边是工具箱,里面有窗体里用到的控件,包括:按钮、标签、文字输入框等。右边是解决方案管理器和属性栏,在属性栏中可以配置窗体的外观信息。

控件:在工具箱里挑选需要的控件,将其放到窗体上进行使用。

控件的使用有两种方法:

方法一:在工具箱里鼠标左键单击控件,然后在窗体空白处单击鼠标左键,此时控件会显示在窗体上。

方法二:在工具箱里,直接鼠标左键单击控件,不松开,将控件拖拽到窗体空白处适合的位置,然后松开鼠标鼠标左键。

第四步:生成项目,并查看项目。

查看结果:

1.3 了解窗体文件结构

在右边的解决方案管理器中可以看到这样一些文件。

1.3.1 窗体文件Form1.cs

Form1.cs是窗体文件,双击Form1.cs就可以看到对应的窗体。窗体文件由两部分组成,Form1.Designer.cs和Form1.resx。

  • Form1.Designer.cs文件:是窗体设计文件,它里面的代码都是自动生成的,当我们设计窗体,往窗体上拖放各种控件,就会在该文件中生成代码。
  • Form1.resx文件:是窗体设计文件中的各种资源(新建的窗体中默认没有该文件,当向窗体拖放控件后,会自动生成该文件。)

注意:不要去修改Form1.Designer.cs和Form1.resx这两个文件,否则可能会导致设计器出错。

1、解读Form1.cs文件

查看Form1.cs文件代码的方法:右键文件名——【查看代码】

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 WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
    }
}
  • using……是自动导入的各种命名空间。
  • 窗体Form1是一个窗体类,它继承于系统窗体类:Form。
  • 在class关键字前面还有一个关键字:partial,翻译过来是“部分的”,partial的作用是将一个类的代码分别定义到多个文件中。它的好处是:程序员和窗体设计器在不同的文件中创建代码,不会相互影响。
  • 代码中的InitializeComponent()方法,就是在窗体设计器文件中创建的方法,这里只是进行调用,该方法的作用是对窗体组件进行初始化。

2、解读Program.cs文件

查看Program.cs文件代码的方法:右键文件名——【查看代码】、或者直接双击文件名

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

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

在Main()方法中,都是VS自动生成的代码,我们只需关注最后一句代码:Application.Run(new Form1());

此代码表示程序启动时,会首先打开Form1窗体。

适用情况:当我们程序中创建了多个窗体时,可以修改这行代码来设置谁是启动窗体。

2、认识窗体

        回想想一下我们现在用过很多软件,这些软件都有不同的窗体,每个窗体的外观和行为都不一样,就比如我们现在用的VS软件,再比如我们电脑上的一些软件如QQ等,他们各有不同。接下来我们学习窗体的常用属性和事件。

2.1 窗体的常用属性

设置窗体属性的方法

在VS软件的右侧,有一个【属性】栏,可以对当前窗体进行属性设置。

注意:如果VS软件界面没有找到【属性】面板栏, 可以通过菜单栏【视图】——【属性窗口】打开属性面板。或者鼠标右键单击窗体,点击【属性】可以调出属性面板。

    

窗体的常用属性:

属性

说明

备注

Name

窗体名字

程序可以见,用户不可见,修改后方便代码编写时调用

Text

标题文字

显示在窗体界面的标题,用户可见

BackColor/BackgroundImage

背景颜色/图片

窗体背景,用户可见(背景图片可清楚)

FormBorderStyle

边框样式

默认Sizeable,可以选择None对比看效果

MaximizeBox

最大化图标

窗体上是否显示最大化按钮,默认是True

MinimizeBox

最小化图标

窗体上是否显示最小化按钮,默认是True

ShowInTaskbar

任务栏显示图标

是否在Windows任务栏中显示默认是True

StartPostion

出现位置

有两个值非常重要 1-CenterScreen 屏幕中央2-CenterParent 父级中央

TopMost

置顶显示

是否始终显示在所有窗体之上,默认是False

WindowState

窗体规格

开启时候窗体显示方式(最大化、最小化、常规)默认是Normal

恶搞窗体程序测试:

设置窗体透明:设置窗体TransParencyKey属性的颜色和BackColor的颜色相等,注意控件的颜色不能和窗体颜色一致,否则控件也透明。运行程序后,就只能看见标题栏和控件了。

设置为蓝屏:

1)下载一张蓝屏背景图片,将其设置为窗体背景图片,并设置BackgroundImage值为Stretch(让背景图片居中)

2)把窗体设置为无边的窗体,设置 FormBoderStyle属性值为 None(让窗体没有边框)

思考:还可以对窗体进行哪些属性的设置,以完成预期效果

2.2 窗体的常用事件

       事件是Windows应用程序中一个非常重要的概念,什么是事件?它其实是程序对用户操作的响应。比如,我们点击Windows开始菜单,菜单就弹出来,点电脑的关机按钮,电脑就关机。Windows应用程序就是事件驱动式编程的,要完成某一功能,就需要选择正确的事件,在事件中编写控制代码。

在属性栏上有两个按钮,,分别代表属性和事件,当我们点击事件按钮时,可以看到对应的事件。

窗体的常用事件

事件

Load

MousseClick

MouseDoubleClick

MouseMove

Closed

说明

窗体加载事件

鼠标点击事件

鼠标双击事件

鼠标移动事件

窗体关闭事件

Load事件演示:在Load事件上双击或者在窗体上双击,就会进入Load事件,在其中插入代码

            this.Text = "这是王迪的第一个窗体";

            启动运行即可看到以下效果:

完整代码演示:

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

        private void Form1_Load(object sender, EventArgs e)
        {
            this.Text = "这是王迪的第一个窗体";
        }
    }
}

分析代码:我们会发现事件其实就是一个方法,方法名称由“窗体名字+事件名”组成,参数object sender 是事件源, EventArgs e 是事件参数。在方法体中编写了一行代码,this代表当前窗体,Text是窗体的标题文字,this.Text = "这是王迪的第一个窗体";d这行代码的作用是在窗体加载时设置标题文字。

 

3、控件的使用

       我们通过开发一款学生信息管理系统,来加深对Winform开发的认识。

        新建一个Windows应用程序项目,给它起名StudentInfoMS,修改窗体的Name属性,起名为FrmMain(窗体命名以Frm为前缀,这里起名FrmMain代表主窗体),设置窗体的Text属性为“学生信息管理系统”

主窗体不能一直空白,不然就没什么作用,我们可以在窗体上添加控件,这样才像一个真正的软件。

3.1 菜单条 MenuStrip

菜单是程序窗体中常见的组成部分,比如VS软件就有大量的菜单。

创建菜单的方法:

第一步:在工具箱中找到MenuStrip控件,将其拖放到主窗体FrmMain上。

第二步:在窗体上点击MenuStrip,添加菜单项MenuItem,输入菜单文字(如果需要快捷键设置,可以在添加文字时加上“&字母”)。菜单项下面还可以继续添加子菜单项。

菜单项MenuItem需要设置的主要属性是Name和Text,Name的定义以tsmi为前缀。如“退出系统”菜单的Name属性可以设置为tsmiExit,Text属性设置为“退出系统(&E)”.

第三步:给菜单项添加事件处理,以完成菜单功能。添加事件的方法和添加窗体事件类似,先选择一个菜单项,这里我们选择“退出系统”菜单项,然后在属性面板栏找到事件Click,双击Click事件,即可进入代码编写模式。

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

        private void menuStrip2_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
        {

        }

        private void 基本信息BToolStripMenuItem_Click(object sender, EventArgs e)
        {

        }

        private void tsmiExit_Click(object sender, EventArgs e)
        {
            Application.Exit();//退出程序
        }
    }
}

在方法tsmiExit_Click中添加方法体代码   Application.Exit(); 此行代码用来实现退出程序的功能。

预览效果,可以点击菜单项【基本信息】——【退出系统】,以完成退出系统的操作。也可以通过快捷键来操作,依次点击ALT+B——ALT+E

 

3.2 基本控件的使用

在项目中新创建一个编辑学生信息的窗体,来认识更多的控件。

第一步:在项目资源管理器中,右键单击xi项目名称,依次选择【添加】——【Windows窗体】

在弹出的窗体中选择【Windows窗体】,然后点击【添加】

设置窗体的Name属性和Text属性

第二步:在窗体中添加GroupBox控件(添加方法同其他控件方法一样),并设置Text属性。

注意:GroupBox 控件是由System.Windows.Forms.GroupBox类提供的,作用是为其他控件提供可识别的分组

用法:可以把一些控件拉到里面,组成一个整体,整体控制,比如enable,visiable等等,有时也用它来替代一下边框的功能,美观界面。

第三步:往窗体中继续添加控件,并根据需要设置Name属性和Text属性等。

控件

说明

备注

命名前缀

Label 

显示文字的标签

在Text属性里修改为显示文字

lbl

TextBox

给用户提供的输入信息框

Label和TextBox的Text属性后缀可以一样

Text属性是默认显示信息

Multline是否多行,默认false,设置为true则允许多行

txt

RadioButton

单选按钮

使用时,要先拖GroupBox(Text属性为空),然后再拖RadioButton到框里。

设置按钮默认被选中,可以设置Checked属性为True。

rdo

GroupBox

分组框

取消分组框的线条的方法:重写Paint事件

grb

DateTimePicker

日期选择器

用于设置日期

dtp

ComboBox

组合框/下拉菜单,用于特特定数据的选择

Text属性是默认显示信息

Items是选项的集合

cbo

Button

按钮

 

btn

控件使用技巧1:单选按钮的应用,当我们需要单项选择时,先拖一个GroupBox控件到窗体上,然后再在GroupBox控件里添加RadioButton按钮,并进行对应属性设置。

注意:在使用GroupBox控件的时候,会有虚线框,如何取消GroupBox控件的虚线框?可以修改一下Paint事件

        private void groupBox2_Paint(object sender, PaintEventArgs e)
        {
            e.Graphics.Clear(this.BackColor);//双击Paint事件后,在大括号中添加改句代码即可。
        }

控件使用技巧2:日期选择器控件的使用,直接拖动一个DateTimePicker控件到适合位置即可,可以通过Value属性设置默认显示日期时间。

控件使用技巧3:所在班级后面显示的,组合框/下拉菜单控件ComboBox的使用。拖动ComboBox控件到窗体上,然后设置Items属性即可(点击Items属性后面的方块,在弹出的窗口中输入集合,每一个占一行)

注意:如果想让ComboBox控件有一个默认选项,设置Text属性即可。提醒Text属性的值最好是Items集合中的一个。

控件使用技巧:4:设置TextBox控件为多行显示,需要修改Multiline属性为True。

注意:如果想设置单行TextBox控件的高度大一些,我们可以通过设置Font属性来调整,如将原来的9pt设置为16pt(或其他你需要的数值)。

3.3 给控件添加事件处理

需求:给取消按钮,添加一个事件,当用户点击取消按钮时,关闭当前窗体。

方法:双击取消按钮,进入代码编写界面,在方法中添加一行代码this.Close();

代码演示:

        private void button1_Click(object sender, EventArgs e)
        {
            this.Close();//此代码用来实现关闭当前窗体
        }

4、窗体间跳转

当一个程序中有2个以上窗体时,可能涉及到两个。体之间的跳转。在案例中,我们希望点击FrmMain窗体中的菜单项“学生信息”时,可以跳转到FrmEditStudent窗体。

需求:实现两个窗体间的跳转。

方法:给菜单项添加Click事件。双击菜单项“学生信息”,进行代码编辑界面,写代码

代码演示:

        //点击“学生信息”菜单项
        private void MsStudent_Click(object sender, EventArgs e)
        {
            //创建窗体对象
            FrmEditStudent frmStudent = new FrmEditStudent();
            //显示窗体
            frmStudent.Show();
        }

结果查看:点击学生信息,跳转到编辑学生信息窗体。

思考:怎么把窗体标题文字居中?

提醒:控件命名一定要符合一定的规范,这样代码才更有可读性,空间的命名一般以控件类型名为前缀,前面是具体的作用,如姓名文本框txtName。

 

5、消息框的使用

       用户在使用软件时,时常会收到提示,比如“是否确定删除文件”、“是否关机”、“电量不足”等,这些提示都是以消息框的形式出现的,这样可以让程序及时提醒用户,并得到用户的反馈,然后根据用户的反馈做出响应。

  

5.1 C#中MessageBox 弹出提示框(消息框)的用法

        消息对话框是用Messagebox对象的Show方法显示的。MessageBox对象是命名空间System.Windows.Forms的一部分,Show是一个静态方法,意思是说,不需要基于MessageBox类的对象创建实例,可以直接使用该方法(可参照:静态方法和实例化方法的区别)。而且该方法是可以重载的,即方法可以有不同的参数列表形式。

不返回任何值: MessageBox.Show(Text , Caption , Buttons , Icon);  

  • 第一个参数:Text:必选参数,设置消息对话框中的提示文本语句,必须是String类型。
  • 第二个参数:Caption:可选参数,设置消息对话框的标题,必须是字符串型。
  • 第三个参数:Buttons:可选参数,设置消息对话框中显示哪些按钮,一般都使用系统提供的几种类型。
  • 第四个参数:Icon:可选参数,设置消息对话框中显示哪个图标,比如说警告、提示、问题等等。

返回结果:DialogResult dr1=MessageBox.Show(参数列表);

扩展内容:MessageBox.Show();方法,还可以有第五个、第六个参数,MessageBox.Show(Text,Caption,Buttons,Icon,Defaultbutton,Option);

  • 第五个参数:Defaultbutton:可选参数,设置消息对话框哪个按钮是默认激活的。
  • 第六个参数:Option:可选参数,为消息对话框设置一些特殊的选项,如文本对齐方式,指定阅读顺序,是否向系统日志写消息。

MessageBox 弹出提示框(消息框)的用法:(修改“退出系统”菜单项的点击事件,添加询问对话框)

示例一:消息框只使用了第一个参数,

即MessageBox.Show("是否确定退出系统?");

示例二:消息框使用第一个和第二个参数

即MessageBox.Show("是否确定退出系统?", "系统提示");

示例三:消息框使用第一个、第二个和第三个参数

即MessageBox.Show("是否确定退出系统?", "系统提示", MessageBoxButtons.OKCancel);

示例四:消息框使用前四个参数

即MessageBox.Show("是否确定退出系统?", "系统提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning);

扩展内容:

1)Buttons参数可取值及功能意义

 常量  功能及意义
  Ok  消息框中只有"确定"按钮
 OkCancel  消息框中只有"确定"和"取消"按钮
 YesNo  消息框中只有"是"和"否"按钮
 YesNoCancel  消息框中有"是","否"和"取消"按钮
 RetryCancel  消息框中有"重试"和"取消"按钮
 AbortRetryIgnore  消息框中有"中止","重试"和"忽略"按钮

2)Icon参数可取值及功能意义

枚举常量  功能意义
 Error  消息框中有一个符号,由一个红色背景的圆圈及其中的白色X组成
 Asterisk  该符号是由一个圆圈及其中的小写字母i组成
 Exclamation  该符号由一个黄色背景的三角形及其中的一个叹号组成
 Hand  该符号由一个红色背景的圆圈及其中的白色x组成
 Question  该符号由一个圆圈及其中的一个问号组成
 None  消息框中不包含符号
 Information  该符号是由一个圆圈及其中的小写字母i组成
 Stop  该符号是由一个红色背景的圆圈及其中的白色X组成
  Warning   该符号是由一个黄色背景的三角形及其中的一个叹号组成

5.2 消息框的返回值

        当系统显示消息框后,有时需要获得用户的反馈,然后再进行后续操作,比如是否删除文件等。MessageBox.Show();方法的返回值就是用户的反馈,返回值的类型是DialogResult。

使用方法,将MessageBox.Show();的返回结果赋值给DialogResult类型变量

如:DialogResult result = MessageBox.Show("是否确定退出系统?");

当系统接收到用户的返回值时,需要进行判断,DialogResult具有以下常量值及代表功能意义。

 常量  功能及意义
  Abort  消息框的返回值是"中止"(Abort),即单击了"中止"按钮
 Cancel  消息框的返回值是"取消"(Cancel),即单击了"取消"按钮
 Ignore  消息框的返回值是"忽略"(Ignore),即单击了"忽略"按钮
 No  消息框的返回值是"否"(No),即单击了"否"按钮
 Ok  消息框的返回值是"确定"(Ok),即单击了"确定"按钮
 Retry  消息框的返回值是"重试"(Retry),即单击了"重试"按钮
 None  消息框没有任何返回值,即没有单击任何按钮
 Yes  消息框的返回值是"是"(Yes),即单击了"是"按钮

5.3 消息框的使用

需求:用户点击“退出系统”后,弹出消息框询问用户是否确定退出,然后根据用户选择结果,进行响应。

实现方法:进入菜单项“退出系统”的Click事件代码,修改代码。

代码演示:

        //点击菜单项“退出系统”
        private void tsmiExit_Click(object sender, EventArgs e)
        {
            //显示询问对话框,并将用户选择的结果赋值给变量result
            DialogResult result = MessageBox.Show("是否确定退出系统?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question);

            //判断用户选择的结果,并作出选择
            if (result == DialogResult.Yes)//如果返回值和DialogResult.Yes相等
            {
                MessageBox.Show("系统已关闭");//提示用户系统关闭
                Application.Exit();//执行退出程序
            }
            
        }

结果演示:

点击菜单项【退出系统】,会弹出消息框

点击按钮【是(Y)】后,弹出消息框,提示“系统已关闭”

再次点击【确定】后,整个系统退出。

课后练习:制作一个游戏主界面窗体,添加菜单项,并练习消息框的使用。

=======================这里是结束分割线=========================

猜你喜欢

转载自blog.csdn.net/dnruanjian/article/details/87917250
今日推荐