C#项目开发全程实录(第4版)
上QQ阅读APP看书,第一时间看更新

2.6 主窗体设计

视频讲解

2.6.1 主窗体概述

系统主窗体主要由3部分构成,分别为菜单栏、导航菜单和状态栏,其中在制作导航菜单时,使用了第三方控件NavBarControl,主窗体运行结果如图2.21所示。

图2.21 主窗体

2.6.2 主窗体技术分析

主窗体是个MDI窗体,通过MDI窗体可以同时打开多个子窗体。如果一个MDI窗体同时打开多个子窗体,假如不对其排列顺序进行调整,则界面会非常的混乱,而且不容易浏览。如何解决这个问题呢?可以通过调用LayoutMdi()方法来排列多个打开的子窗体。

LayoutMdi()方法实现在MDI父窗体内排列多文档界面(MDI)子窗体。其语法格式如下:

    public void LayoutMdi (MdiLayout value)

参数value用来定义MDI子窗体的布局,它是MdiLayout枚举类型,MdiLayout枚举用于指定MDI父窗体中子窗体的布局。其语法格式如下:

    public enum MdiLayout

MdiLayout的枚举成员及说明如表2.9所示。

表2.9 MdiLayout的枚举成员

例如,下面的代码使用LayoutMdi()方法实现多个子窗体在MDI主窗体中水平平铺和垂直平铺。

2.6.3 主窗体实现过程

主窗体的具体实现步骤如下。

(1)新建一个Windows窗体,命名为frmMain.cs,用作该企业客户资源管理系统的主窗体,该窗体主要用到的控件、控件属性设置及其用途如表2.10所示。

表2.10 主窗体主要用到的控件

(2)frmMain窗体的Load事件中,首先,在状态栏中显示登录的用户名和时间,然后根据登录用户的操作权限,显示不同的菜单。frmMain窗体的Load事件关键代码如下:

例程10 代码位置:资源包\TM\02\CRM\frmMain.cs

 代码贴士

❶ DateTime.Now属性用来获得当前系统时间,ToLongDateString()用来将字符串的值转换为其等效的长日期字符串表示形式,ToLongTimeString()用来将字符串的值转换为其等效的长时间字符串表示形式。

❷ 判断用户权限,Trim()方法用来去掉字符串最后的空白字符。

❸ Visible属性用来设置控件是否可见。

选择菜单栏中的子菜单时,程序会以当前窗体为父窗体显示相应的窗体,由于它们的实现方法相同,这里以“区域信息管理”子菜单为例进行概括介绍。选择菜单栏中的“区域信息管理”子菜单,生成区域信息管理窗体的一个对象,并指定其父窗体为当前窗体,然后将区域信息管理窗体显示出来。“区域信息管理”子菜单的Click事件代码如下:

例程11 代码位置:资源包\TM\02\CRM\frmMain.cs

选择导航菜单中的菜单项时,程序会调用菜单栏中相应子菜单项的Click事件来完成操作,这里以“区域信息管理”菜单项为例进行介绍。选择导航菜单中的“区域信息管理”菜单项,程序调用菜单栏中“区域信息管理”子菜单项的Click事件,完成显示区域信息管理窗体的操作。“区域信息管理”菜单项的LinkClicked事件代码如下:

例程12 代码位置:资源包\TM\02\CRM\frmMain.cs

为了方便用户操作,本实例在帮助模块中提供了“启用Word”“启用Excel”“启用记事本”3种常用的文本操作,这3种文本操作的实现原理相同,这里以“启用记事本”为例进行说明。“启用记事本”子菜单的Click事件代码如下:

例程13 代码位置:资源包\TM\02\CRM\frmMain.cs

 代码贴士

❶ Process.Start()方法用来通过指定文档或应用程序文件的名称来启动进程资源,并将资源与新的Process组件关联。

为了实现对窗体进行动态布局,本实例在帮助模块中提供了“水平平铺”和“垂直平铺”两种布局方式,这两种布局方式的实现原理相同,这里以“水平平铺”为例进行说明。“水平平铺”子菜单的Click事件代码如下:

例程14 代码位置:资源包\TM\02\CRM\frmMain.cs

选择帮助模块中的“重新登录”子菜单,可以实现切换用户功能。“重新登录”子菜单的Click事件代码如下:

例程15 代码位置:资源包\TM\02\CRM\frmMain.cs