程序设计基础-Visual Basic(2019秋)

沈阳师范大学 刘立群

目录

  • 认识 Visual Basic
    • ● 认识 Visual Basic
    • ● 对象的属性、事件和方法
    • ● 控件的容器-窗体
    • ● 文本编辑工具-文本框
    • ● 命令按钮和标签
  • 程序设计基础
    • ● 语句和语法规则
    • ● 数据类型和常量变量
    • ● 运算符与表达式
    • ● 常用内部函数
    • ● 输入与输出
  • 基本控制结构和算法
    • ● 程序结构与算法
    • ● 选择结构的语句实现
    • ● 循环结构的语句实现
    • ● 穷举和递推问题求解
    • ● 嵌套循环解百钱百鸡问题
    • ● 星形矩阵的显示问题
  • 常用标准控件
    • ● 选择控件和滚动条--设置文字格式
    • ● 列表框及组合框—购票系统
    • ● 计时器与图片控件—自动变换的交通灯
    • ● 图形操作—小球运动
  • 数组和过程
    • ● 数组的定义与一维数组的应用
    • ● 二维数组
    • ● 控件数组
    • ● 自定义过程
    • ● 参数传递
    • ● 变量的作用域
  • 键盘鼠标事件与菜单设计
    • ● 鼠标键盘事件--小鸡吃虫游戏
    • ● 菜单程序设计--控制移动字幕
  • 通用对话框与文件操作
    • ● 通用对话框与文件操作
    • ● 文件操作--打开保存数据实例
菜单程序设计--控制移动字幕

菜单设计

1 概  述

菜单是一系列命令组成的列表,是Windows应用程序普遍使用的一种交互方式,它能够使用户灵活地操作和控制应用程序并能使界面整洁。Visual Basic环境下的菜单分为两种类型:下拉式菜单和弹出式菜单。这两种菜单的设计都要求在“菜单编辑器”中进行。本章将介绍这两种菜单的创建方法。

1.1 下拉式菜单

下拉式菜单一般显示在窗口顶端的菜单栏。菜单栏中的菜单项称为菜单标题。单击某一个菜单标题,将下拉出一个菜单,菜单由若干项菜单命令、分隔条或者下一级子菜单标题组成。

1.2 弹出式菜单

弹出式菜单又称为“快捷菜单”、“上下文相关菜单”,其位置显示比较灵活。当用鼠标在某一个对象(或空白区域)单击右键后弹出的菜单即为弹出式菜单。与下拉式菜单不同的是:弹出式菜单的显示位置不同,它的显示位置取决于鼠标单击时指针的位置;显示内容不同,它显示的内容取决于所选对象以及前后的相关操作。

1.3 菜单设计的步骤

无论是下拉式菜单还是弹出式菜单,每一个菜单项都是VisualBasic的一个控件对象,具有和其他控件一样的属性,如Caption、Name、Check、Enabled和Visible等属性。所不同的是,菜单控件不在Visual Basic的工具箱中,而且菜单控件的属性不能在属性窗口中修改,只能在菜单编辑器中修改。菜单控件只能响应Click事件。

设计菜单的一般步骤如下:

1.根据程序设计的需要进行菜单的界面设计,包括菜单栏中的各菜单标题,各级子菜单中的菜单项,以及它们各自的事件过程。

2.打开菜单编辑器,建立各级菜单,并设置相应的属性。

3.编写程序代码。建立菜单项后,为相应的菜单项编写Click事件代码。

2. 下拉式菜单的建立

1.打开菜单编辑器

打开菜单编辑器的方法有以下几种:

⑴ 选择“工具 | 菜单编辑器”选项。       

⑵ 单击工具栏中的“菜单编辑器” 按钮。

⑶ 在窗体上单击鼠标右键,选择弹出菜单中的“菜单编辑器”选项。

⑷ 按【Ctrl+E】键。

2.菜单编辑器的组成

菜单编辑器窗口由三部分组成:数据区、编辑区和菜单显示区。

⑴ 数据区

也称为菜单属性区,位于“菜单编辑器”标题栏的下方,用来设置菜单控件的属性。

标题(P):为程序运行时菜单上的说明文字,如“文件”、“格式”等,相当于普通控件的Caption属性。若是减号“-”将在菜单中显示一条分隔线,常用此种方法使菜单项分组。另外,在标题中可以用“&”为菜单项设定快速访问键,如标题设置为“文件(&F)”则菜单项显示为“文件(F)”。

名称(M):用来标注菜单项的控件名字,这个名字用来在程序中引用菜单项,相当于普通控件的Name属性。所有菜单项的名称属性必须是唯一的,除非这个菜单项是控件数组中的一个元素。

索引(X):相当于其它控件的Index属性,当把多个菜单项定义为控件数组时,索引是控件数组的下标,控件数组中的菜单项具有相同的Name属性,而且是同一个菜单中的相邻菜单项。索引可以不从0开始,也可以不连续,但必须按升序排列。

快捷键(S):用来设置菜单项的快捷键,可以从它的下拉列表框中进行选择。

复选(C):该属性为True(选中)时,在该菜单项前面出现一个“√”标记,表示该项处于活动状态。相当于复选框控件的Checked属性。

有效(E):该属性为False(未选中)时,对应的菜单项呈灰色,表示当前不可用。该属性相当于普通控件的Enabled属性。

可见(V):确定菜单是否可见,该属性为False(未选中)时,对应的菜单项将暂时从菜单中去掉。它相当于普通控件的Visible属性。

帮助上下文ID(H):在Helpfile属性指定的帮助文件中用该数值查找适当的帮助信息。

协调位置(O):选择菜单的显示属性,该属性决定是否及如何在容器窗体中显示菜单,0-None:不显示,1-Left:靠左,2-Middle:居中,3-Right:靠右。

显示窗口列表(W):该属性为True(选中)时,将显示当前打开的一系列子窗口标题。

⑵ 编辑区

数据区下方的区域是菜单编辑区。编辑区上有7个控制按钮,编辑菜单时要借助于这7个按钮。

左右箭头 :单击右箭头,产生内缩符号(….),表示将建立下一级菜单。单击左箭头,删除内缩符号。在Visual Basic 6.0中最多可建立6级子菜单。

上下箭头 :单击上箭头把条形光标上移一个选项,单击下箭头把条形光标下移一个选项。

下一个(N):开始设置一个新的菜单项。

插入(I):用来插入一个新的菜单项。

删除(T):删除条形光标所在的菜单项。

⑶ 菜单显示区

位于菜单设计窗口的下部,用来显示输入的菜单项。显示区上列出了菜单项标题、级别和快捷键等。如果一菜单项相对于上一个菜单项向右缩进,表示它是上一个菜单项的子菜单。向右缩进相同的菜单项属于同一个子菜单。没有缩进的菜单项是顶级菜单项,将显示在菜单栏中。可以在此区域选择要修改的菜单项,用按钮调整菜单项顺序和缩进。

2. 下拉式菜单的建立

3. 弹出式菜单的建立

弹出式菜单是一种独立于菜单栏而显示在窗体上的浮动菜单,根据用户单击鼠标右键时的位置动态地显示。

弹出式菜单的建立分三步进行:

1.用菜单编辑器建立主菜单及其子菜单,并且把各菜单所需的程序代码写好。

2.把菜单标题项的Visible(可见性)属性设置为False。

3.编辑需要弹出菜单对象的MouseDown事件。用PopupMenu方法显示弹出式菜单。

格式:[对象名.]PopupMenu菜单名[,Flags[,X[,Y[,BoldCommand]]]]

说明:

⑴ 对象名:需要弹出菜单的对象名称,一般为窗体,省略对象指的是当前窗体。

⑵ 菜单名:是指通过“菜单编辑器”定义的菜单标题项名称属性Name。

⑶ Flags:位置参数,用来指定弹出式菜单的位置及行为。包含位置常数和行为常数。这两组参数可以单独使用,也可以联合使用。联合使用时,每组中取一个值,两值相加。如4+2表示弹出式菜单显示的位置中心在X坐标,单击左键或右键都会选择菜单项。

⑷ X,Y是坐标值,表示弹出式菜单在窗体上显示的位置,默认为鼠标坐标。

⑸ BoldCommand用于指定菜单中要以粗体显示的菜单名称。

⑹ 除菜单名外,其它参数都是可选参数。若省略所有可选参数,运行程序时,在窗体任意位置单击鼠标左键或右键,将弹出一个菜单。


=============================================================================================

                                      实验

建立一个菜单程序,控制移动字幕。

项目分析:

这个程序需要建立两类菜单,下拉菜单和弹出式菜单

制作菜单:

打开菜单编辑器

建立一个菜单控制的移动字幕,程序运行结果如图11.1所示。窗体上添加一个标签,一个时钟控件。利用菜单编辑器制作两条菜单控制方向控制菜单下有开始暂停复位标题文字退出等菜单项。其中,开始菜单项可以让标签字幕开始移动,单击后变为灰色,并使暂停菜单项可用;暂停菜单项可以让标签字幕停止移动,单击后变为灰色,并使开始菜单项可用;复位菜单项可以将标签水平放置到窗体中间;单击标题文字菜单项可以弹出一个输入框,输入的文字作为标签的标题;退出菜单项可以结束工程运行。方向菜单下有向左向右两个菜单项,分别可以控制菜单移动的方向,单击某一个菜单项后加复选号,同时取消另一个菜单项的复选号。

项目设计:

创建界面。新建工程,在窗体上添加标签控件Label1和时钟控件Timer1

按表格中的属性值修改标签和计时器的属性。

设置属性。属性设置见表11.1

11.1 属性设置

                                   

 

控件

 
 

属性名称

 
 

属性值

 
 

Label1

 
 

Caption

 
 

欢迎光临

 
 

Label1

 
 

AutoSize

 
 

True

 
 

Label1

 
 

Font

 
 

字号设为48

 
 

Timer1

 
 

Interval

 
 

100

 
 

Timer1

 
 

Enabled

 
 

False

 

建立菜单。打开菜单编辑器,按照表格中的菜单结构依次输入每个菜单项,这里面包括了下拉菜单的两个等层菜单和弹出式菜单,颜色那一项开始就是弹出式菜单,需要将颜色设置为不可见。编辑完毕后在窗体上就可以看到控制和方向两个下拉式菜单。弹出式菜单是隐藏的。

4)编写程序代码。打开每一个菜单项的click事件,编写响应的代码。其中开始和暂停两项主要是控制计时器可用不可用。

复位是将标签放置到窗体中央

标题文字项可以弹出一个消息框输入标题

向左向右是修改菜单项的checked属性设置

timer1timer事件中编写标签运动的代码,首先判断向左向右两个菜单项checked属性的状态,来决定label1left属性值的变化。如果标签移动到了窗体的左侧再将其放置到窗体右侧继续移动。

下面编写弹出式菜单。在这几个颜色项的click事件中编写让标签变色的代码

找到form1mousedown事件,编写判断button的值,如果为2那么将菜单弹出。Color就是弹出式菜单等层项的名称。

运行程序测试程序功能。

建立菜单见表11.2

11.2 菜单结构

                                                                                                   

 

标题

 
 

名称

 
 

内缩符号

 
 

复选

 
 

可用

 
 

控制

 
 

Kz

 
 

 

 

 
 

开始

 
 

Ks

 
 

1

 

 

 
 

暂停

 
 

Zt

 
 

1

 

 

 
 

复位

 
 

Fw

 
 

1

 

 

 
 

标题文字

 
 

Btwz

 
 

1

 

 

 
 

退出

 
 

Tc

 
 

1

 

 

 
 

方向

 
 

Fx

 
 

 

 

 
 

向左

 
 

Xz

 
 

1

 
 

 
 

 
 

向右

 
 

Xy

 
 

1

 

 

 

提示:

由于菜单初始的可用性设置为后,不能打开该菜单的代码窗口,所以对于暂停菜单,应该先将其可用性设置为,当编写完代码后,再次进入菜单编辑器,将其可用性设置为

编写代码。

Private Sub ks_Click()                        '“开始菜单

 ks.Enabled = False

 zt.Enabled = True

 Timer1.Enabled = True

End Sub

Private Sub zt_Click()                        '“暂停菜单

 zt.Enabled = False

 ks.Enabled = True

 Timer1.Enabled = False

End Sub

Private Sub fw_Click()                       '“复位菜单

 Label1.Left = (Form1.Width - Label1.Width) / 2

End Sub

Private Sub btwz_Click()                           '“标题文字菜单

 标题= InputBox("请输入标题文字","输入", "欢迎光临")

 Label1.Caption = 标题

End Sub

Private Sub tc_Click()                        '“退出菜单

 End

End Sub

Private Sub xy_Click()                       '“向右菜单

 xz.Checked = False

 xy.Checked = True

End Sub

Private Sub xz_Click()                        '“向左菜单

 xz.Checked = True

 xy.Checked = Flase

End Sub

Private Sub Timer1_Timer()                '计时器事件

If xz.Checked = TrueThen

  Label1.Left = Label1.Left - 200

  If Label1.Left <= -Label1.Width Then

    Label1.Left = Form1.Width

  End If

End If

If xy.Checked = TrueThen

  Label1.Left = Label1.Left + 200

  If Label1.Left >= Form1.Width Then

    Label1.Left = -Label1.Width

  End If

End If

End Sub