10. Windows窗体

15 篇文章 4 订阅

1 Form窗体

Form窗体也成称为窗口,是.NET框架的智能客户端技术,使用窗体可以显示信息、请求用户输入以及通过网络与远程计算机通讯。

1.1 Form窗体的概念

在Windows中,窗体是向用户显示信息的可视图面,窗体是Windows应用程序的基本单元。窗体都具有自己的特征,可以通过编程来设置。窗体也是对象,窗体类定义了生成窗体的模板,每实例化一个窗体类,就产生一个窗体。.NET框架类库的System.Windows.From命名控件中定义的From类是所有窗体类的基类。编写窗体应用程序时,首先需要设计窗体的外观和在窗体中添加控件或组件。虽然可以通过编写代码来实现,但却不直观也不方便,而且很难精准的控制界面。VisualStudio提供了一个图形化的可视化窗体设计器,可以实现所见即所得的设计效果,快速开发窗体应用程序。

1.2 添加或删除窗体

  1. 添加:
    如果要想项目中添加一个新窗体,可以在项目名称上单击鼠标右键,在弹出的此案单重选择添加Windows窗体或新建项。然后选中窗体,点击添加。
    在这里插入图片描述

在这里插入图片描述
说明:在设置窗体的名称时,不要使用关键字进行设置

  1. 删除:
    在要删除的窗体上单击书标右键,选择删除。

在这里插入图片描述

1.3 多窗体的使用

一个完整的Windows应用程序是由多个窗体组成的,此时就需要对多窗体设计有所了解。多窗体即是向项目中添加多个窗体,在这些窗体中实现不同的功能。

  1. 多窗体的建立是向某个项目中添加多个窗口,添加多窗体后的项目如下图:
    在这里插入图片描述
  2. 设置启动窗体
    在项目中添加了多个窗体以后,如果要调试程序,必须要设置先运行的窗体。这样就需要设置项目启动窗体。项目的启动窗体是在Program.cs文件中设置的,在Program.cs文件中改变Run方法的参数,即可实现设置启动窗体。
    语法:
public static void Run(Form mainForm)
--mainForm:要设置为启动窗体的Form 

1.4 窗体的属性

窗体都包含一些基本的组成要素,包括图标、标题、位置和背景等。这些要素可以通过窗体的“属性”面板进行设置,也可通过代码实现。但是为了快速开发窗体应用程序,通常是通过“属性”面板进行设置。

  1. 更换窗体的图标
    添加一个新的窗体后,窗体的图标是系统默认的图标。如果想要更换窗体的图标,可以再“属性”面板中设置窗体的Icon属性,如下图:
    在这里插入图片描述

在这里插入图片描述

  1. 隐藏窗体的标题栏
    在某种情况下需要隐藏窗体的表日兰,例如,软件的加载窗体,大多数都采用无标题栏的窗体。通过这些设置窗体的FormBorderStyle属性的属性值,即可隐藏窗体的标题栏。
    FormBorderStyle属性的属性值及说明:
属性值说明
Fixed3D固定的三维边框
FixedDialog固定的对话框样式的粗边框
FixedSingle固定的单行边框
FixedToolWindow不可调整大小的工具窗口边框
None无边框
Sizable可调整大小的边框
SizableToolWindow可调整大小的工具窗口边框
  1. 控制窗体的显示位置
    可以通过窗体的StartPosition属性,设置加载窗体在显示器中的位置。StartPosition属性有五个属性值。
    StartPosition属性的属性值及说明:
属性值说明
CenterParent窗体在其父窗体中居中
CenterScreen窗体在当前显示窗口中居中,其尺寸在窗体大小中指定
Manual固定的位置由Location属性确定
WindowsDefaultBounds窗体固定在Windows默认位置,其边界也由Windows默认决定
WindowsDefaultLocation窗体固定在Windows默认位置,其尺寸在窗体大小中指定
  1. 修改窗体的大小
    在窗体的属性中,通过Size属性设置窗体的大小。双击窗体属性面板中的Size属性,可以看到其下拉菜单中有Width和Height俩个属性,分别用于设置窗体的宽和高。修改窗体的大小,只需要更改Width和Height属性的值即可。
    在设置窗体的大小时,其值时int32类型的,不要用单精度和双精度进行设置。

  2. 设置图像背景的窗体

为使窗体设计更加美观,通常会设置窗体的背景。可以设置窗体的背景颜色,也可以设置窗体的背景图片。通过设置窗体的BackGroundImage属性,可以设置窗体的背景图片。
在这里插入图片描述
在这里插入图片描述
效果对比:
在这里插入图片描述

1.5 窗体的显示与隐藏

  1. 窗体的显示
    如果要在一个窗体中使用按钮调用另一个窗体,就必须通过Show方法显示窗体,语法如下:
public void Show()

实例:

//在Form1窗体中添加一个Button按钮,在按钮的Click事件中调用Show方法,打开Form2窗体
Form2 frm2 = new Form2();
frm2.Show();

效果如下图:
在这里插入图片描述

  1. 窗体的隐藏
    通过调用Hide方法隐藏窗体
    语法:
public void Hide()

实例:

//通过登录窗口登录系统,输入用户名和密码后名单击登录按钮,隐藏登录窗口,显示主窗体。
this.Hide();
frmMain frm = new frmMain();
frm.Show();

1.6 窗体的事件

  1. Click(单击)事件
    当单击窗体时,就会触发窗体的Click事件。

语法:

public event EventHandler Click

实例:

//在窗体的Click中编写代码,实现单击窗体时,弹出提示框
private void Form1_Click(Object sender,EventArgs e)
{
	MessageBox.Show("已经单击了窗体!");
}

效果:在这里插入图片描述

  1. Load(加载)事件
    窗体加载时,将触发窗体的Load事件。可以在Load事件中分配窗体的使用资源。

语法:

public event EventHandler Load

实例:

private void Form1_Load(Object sender, EventArgs e)
{
    if (MessageBox.Show("是否查看窗体!","", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes)
    { }
}

效果:
在这里插入图片描述

  1. FormClosing(关闭)事件
    窗体关闭时,触发窗体的FormClosing事件

语法:

public event FormClosingEventHandler FormClosing

实例:
如果要阻止窗体的关闭,应该使用FormClosing事件,并将传递给事件处理程序的CancelEventArgs的Cancel属性设置为true。

//关闭窗体之前弹出提示框,询问是否关闭当前窗体,单击是按钮,则关闭窗体
public void Form1_FormClosing(object sender,FormClosingEventArgs e)    
{
	 DialogResult dr = MessageBox.Show("是否关闭窗体","提示",MessageBoxButtons.YesNO,MessageBoxIcon.Waming);
	if(dr == DialogResult.Yes)
	{
		e.Cancel = false;
	}
	else
	{
		e.Cancel = true;
	}
}

效果:
在这里插入图片描述

2 MDI窗体

窗体是所有界面的基础,这就意味着打开多个文档,需要具有能够同时处理多个窗体的应用程序。为了适应这个需求,产生了MDI窗体,及多文档界面。

2.1 MDI窗体的概念

多文档界面(Multiple-Document Interface,MDI)窗体用于同时显示多个文档,每个文档显示在各自的窗体中。MDI窗体中通常有包含子菜单的窗口菜单,用于在窗口或文档之间进行切换。
MDI窗体的应用非常广泛,例如,如果某公司的库存系统需要实现自动化,则需要使用窗体来输入客户和货物的数据、发出订单以及追踪订单。这些窗体必须链接或者从属于一个界面,并且必须能够同时处理多个文件。这样就需要建立MDI窗体以解决这些需求。

2.2 如何设置MDI窗体

在MDI窗体中,起到容器作用的窗体被称为“父窗体”,可放在父窗体中的其他窗体被称为“子窗体”,也称为“MDI子窗体”。当MDI应用程序启动时,首先会显示父窗体。所有的子窗体都在父窗体中打开,在父窗体中可以随时打开多个子窗体。每个应用程序只能有一个父窗体,其他子窗体不能移出这个父窗体的框架区域。

  1. 设置父窗体
    如果要将某个窗体设置为父窗体,只要在窗体的属性面板中,将IsMdiContainer属性设置为true即可。
    在这里插入图片描述

  2. 设置子窗体

设置完父窗体,即可通过设置某个窗体的MdiParent属性来确定子窗体。
语法:

public Form MdiParent {get; set; }

实例:

public Form1()
{
    InitializeComponent();
    Form2 frm2 = new Form2();
    frm2.Show();
    frm2.MdiParent = this;
    Form3 frm3 = new Form3();
    frm3.Show();
    frm3.MdiParent = this;
    Form4 frm4 = new Form4();
    frm4.Show();
    frm4.MdiParent = this;
    Form5 frm5 = new Form5();
    frm5.Show();
    frm5.MdiParent = this;
}     

效果:
在这里插入图片描述

2.3 排列MDI子窗体

如果一个MDI窗体中有多个窗体同时打开,加入不对齐排列顺序进行调整,那么界面会非常混乱,而且不容易浏览,可以通过使用带有MdiLayout枚举的LayoutMdi方法来排列多文档界面父窗体中的子窗体。

语法:

public void LayoutMdi(MdiLayout value)
--value:是MdiLayout枚举值之一,用来定义MDI窗体的布局。
--MdiLayout枚举用于指定MDI父窗体中子窗体的布局。
public enum MdiLayout 

MdiLayout的枚举成员:

枚举成员说明
Cascade所有MDI子窗体均层叠在MDI父窗体的工作区内
TileHorizontal所有MDI子窗体均水平平铺在MDI父窗体的工作区内
TileVertical所有MDI子窗体均垂直平铺在MDI父窗体的工作区内

实例:

private void menuStrip1_ItemClicked_1(object sender, ToolStripItemClickedEventArgs e)
{
   if (e.ClickedItem.ToString() == "加载子窗体")
   {
       Form2 frm2 = new Form2();
       frm2.Show();
       frm2.MdiParent = this;
       Form3 frm3 = new Form3();
       frm3.Show();
       frm3.MdiParent = this;
       Form4 frm4 = new Form4();
       frm4.Show();
       frm4.MdiParent = this;
       Form5 frm5 = new Form5();
       frm5.Show();
       frm5.MdiParent = this;
   }
   if (e.ClickedItem.ToString() == "水平平铺")
       LayoutMdi(MdiLayout.TileHorizontal);
   if (e.ClickedItem.ToString() == "垂直平铺")
       LayoutMdi(MdiLayout.TileVertical);
   if (e.ClickedItem.ToString() == "层叠排列")
       LayoutMdi(MdiLayout.Cascade);
}
       

效果:

在这里插入图片描述
在这里插入图片描述

3 继承窗体

3.1 继承窗体的概念

继承窗体就是根据现有窗体的结构创建一个与其一样的新窗体,这种从现有窗体继承的过程可视化为继承。在某种情况下,项目可能需要一个与在以前的项目中创建的窗体类似的窗体,或者希望创建一个基本窗体,其中含有随后将在项目中再次使用的控件布局之类的设置,每次重复使用时,都会对原窗体的模板进行修改。这时就需要创建继承窗体。通过从基窗体继承,来创建新Windows窗体是重复最佳工作成果的快捷方式,而不必每次需要时都重新创建一个。为了从一个窗体继承,包含该窗体的文件或命名空间必须已编译成可执行文件或dll。

继承窗体就好像是游戏的升级版本,升级版本不但有原版本的一切功能,还添加了一些新的功能,或是对原版本进行了一些改动。

3.2 创建继承窗体

创建继承窗体的方法有俩种:一种是是以编程方式创建继承窗体,另一种是使用继承选择器创建继承窗体。

  1. 以编程方式创建继承窗体

以编程方式创建继承窗体时,主要是在类定义中将引用添加到要从其继承的窗体。引用应包含窗体的命名空间,后面跟一个句点,然后是基窗体本身的名称。
实例:

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

    private void Form1_Load(object sender, EventArgs e)
    {
    }
    private void label1_Click(object sender, EventArgs e)
    {
    }
    private void button1_Click(object sender, EventArgs e)
    {
        label1.Text = textBox1.Text;
    }
}
//Form2 代码
public partial class Form2 : WinFormsApp1.Form1
{
    public Form2()
    {
        InitializeComponent();
    }
}

效果:
在这里插入图片描述

  1. 使用继承选择器创建继承窗体

继承窗体或其他对象最简单的方法时使用“继承选择器”对话框。通过对话框就可利用已经咋其他解决方案中创建的代码或用户界面。为了使用“继承选择器”对话框从某个窗体继承,包含该窗体的项目必须已经生成了执行文件或DLL。若要生成项目,可以选择“生成”菜单中的“生成解决方案”命令。
① 在“解决方案资源管理器”面板的项目名称上单击鼠标右键,在弹出的快捷菜单中选择“添加-新建项目”。打开“添加新项”对话框。
②从“添加新项”对话框中选择继承的窗体后,单击“添加”按钮,打开“继承选择器”对话框
③从“继承选择器”对话框中选择添加的继承窗体的基窗体后,单击“确定”按钮,完成继承窗体的添加。
在这里插入图片描述

3.3 在继承窗体中修改继承的控件属性

在向窗体中添加控件时,其Modifiers属性默认为Private。因此如果继承这样的窗体,在继承窗体中,控件的属性全部为不可编辑状态。如果希望在继承窗体中编辑各个控件的属性,首先要将基窗体中控件的Modifiers属性全部设置为Public。
在这里插入图片描述

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值