VB讲课笔记11:多重窗体与环境应用

VB讲课笔记11:多重窗体与环境应用

主要考查多重窗体的应用以及VB工程结构。以选择题和操作题两种形式考核。选择题中所占分值较少,约占总分的1%,多属于概念题。操作题中,主要出现在简单应用题,操作题试题的抽中概率约为4%。

一、多重窗体应用程序
一个VB工程里可以有多个窗体模块,那就涉及一个工程启动对象的问题。在VB里,可以将某个窗体设置为启动对象,也可以将标准模块里定义的Sub Main过程设置为启动对象。在启动窗体里,可以通过窗体的Show与Hide方法显示与隐藏其它窗体,通过Load和Unload方法加载和卸载其它窗体。
1、创建工程,添加一个窗体和一个模块

2、打开工程属性窗口,设置启动对象



将启动对象改为Form2:


启动程序,看看是不是Form2出现在屏幕上。


3、将把Sub Main作为启动对象
要求用户输入姓名,如果姓名是“admin”,则显示窗体Form1,否则显示窗体Form2。

启动程序,首先弹出输入框,要求用户输入姓名:

输入“admin”,看看那个窗体出现在屏幕上:

单击【确定】按钮,你会发现窗体Form1出现在屏幕上:

关闭程序,重新启动,这次输入其它姓名来试一试。


4、多重窗体程序的保存

注意,要保存模块、窗体和工程文件到指定位置。

单击工具栏上【保存】按钮,弹出【文件另存为】对话框:




注意:窗体、模块和工程文件名要按考试题目要求修改。

二、多文档界面(MDI -- Multi-Document Interface)
(一)多文档界面概念
多文档界面由父窗体和子窗体组成。父窗体也称MDI窗体,是子窗体的容器;子窗体亦称文档窗体。只允许父窗体加载子窗体。 所有子窗体具有相同的功能,且都包含在MDI窗体中。多文档界面主要特性如下:
(1)在MDI窗体的工作区中显示所有子窗体。用户可改变、移动窗体的大小。
(2)最小化时,所有的子窗体也被最小化,但只有MDI窗体的图标出现在任务栏中。
(3)当最大化一个子窗体时。它的标题与MDI窗体的标题一起显示在MDI窗体的标题栏上。
(4)MDI窗体和子窗体都可以有各自的菜单栏,子窗体加载时覆盖MDI窗体的菜单。

(二)创建MDI界面
MDI应用程序至少应有两个窗体:父窗体和一个子窗体。子窗体就是MDIChild属性设置为True的普通窗体。
1、创建多文档父窗体
(1) “工程”→“添加MDI窗体”→打开“添加MDI窗体”对话框→“新建MDI窗体”→单击“打开”按钮,即完成创建MDI窗体。
(2)设置MDI窗体的Caption属性。
(3) “工程”→“工程属性”→打开“工程属性”对话框→“启动对象”框中将MDI窗体设置为启动窗体。
(4)创建MDI窗体的菜单栏、工具栏、状态栏。其创建方法与普通窗体相同。 

2、创建子窗体
    “MDI窗体”建好后,在其上建立子窗体的过程如下:
(1)创建一个新的普通窗体(或打开一个已存在的普通窗体),将其Caption属性设置为“文档1”,并将其MDIChild属性设置为True,则该窗体变为子窗体。
(2)子窗体界面设计。
(3)重复(1)、(2)步骤,可创建多个子窗体。

案例:演示多文档界面

利用多文档窗口界面实现同时打开多个文档进行编辑。建立一个MDI窗体,为窗体增加菜单栏。“文件”菜单下有“新建”和“退出”两个子菜单,建立一个子窗体,在里面添加一个TextBox控件,用于编辑文本。

1、创建工程,更名为“演示多文档界面”,移除默认的窗体Form1


2、添加MDI窗体,更名为frmMain,标题设置为“演示多文档界面”




3、给主界面添加文件菜单,包含两个子菜单:新建和退出

4、添加一个窗体,更名为frmChild,标题设置为“子窗体”

(1)要使窗体frmChild成为frmMain的子窗体,必须设置MDIChild属性为True


看一看,在工程资源管理器窗口里,frmMain和frmChild的图标刚好相反:


(2)在子窗体里添加一个文本框

名称属性设置为“txtContent”

Text属性设置为空

MultiLine属性设置为True

ScrollBars属性设置为2(垂直滚动条)


5、编写主窗体菜单单击事件处理过程


6、编写子窗体frmChild的Resize事件过程


7、在工程属性对话框里,设置启动对象为frmMain


8、运行程序,测试效果


单击【文件】菜单下的【新建】选项:


再单击【文件】菜单下的【新建】选项:


三、VB工程结构

1、标准模块
2、窗体模块
3、Sub Main 过程

Sub Main过程是在标准模块里定义的,可以设置为启动对象。



四、闲置循环与DoEvents 语句

1、DoEvents概述

       DoEvents,转让控制权,以便让操作系统处理其它的事件。

      DoEvents 函数会返回一个 Integer,以代表 Visual Basic 独立版本中打开的窗体数目,例如,Visual Basic,专业版,在其它的应用程序中,DoEvents 返回 0。
      DoEvents 会将控制权传给操作系统。当操作系统处理完队列中的事件,并且在SendKeys 队列中的所有键也都已送出之后,返回控制权。

      DoEvents 对于简化诸如允许用户取消一个已启动的过程 — 例如搜寻一个文件 — 特别有用。对于长时间过程,放弃控制权最好使用定时器或通过委派任务给 ActiveX EXE 部件来完成。以后,任务还是完全独立于应用程序,多任务及时间片由操作系统来处理。

2、使用DoEvents

(1)场景——窗体启动时事务太多或者使用Sleep函数暂停,导致窗体迟迟不能显示出来。


启动程序,看到的不是窗体,而是一片矩形区域:


过了5000毫秒,才显示窗体,以及上面输出的字符串。


这个体验显然不好,怎么处理呢?在Show语句之后加一个DoEvents语句,将控制权移交给操作做系统。


运行程序,看看有什么不同?

首先看到窗体:


5000毫秒之后,看到打印在窗体上的字符串:


采用了DoEvents语句,改善了启动窗体时的用户体验。

(2)场景——有个很耗时的循环导致程序不响应


运行程序,单击Command1,你会等待很久才会看到窗体输出“二级VB培训”。关键在于,在等待期间,用户什么操作也不能干,就是对用户不响应,这个体验是大大地不好。利用DoEvents语句,就可以改善用户体验。


(3)场景——想在循环中看到处理过程



启动程序,单击【Command1】按钮,并没有在Text1框里动态显示循环变量count的值,而是要等着循环结束时才会执行Text1.Text = count,在文本框里显示结果100000。


启动程序,单击【Command1】按钮,你会看到文本框里的数字在不断变化。