程序界面设计是软件开发中的一个重要环节,本章介绍了下拉菜单、弹出式菜单、通用对话框程序设计、状态栏设计、多重窗体设计和多文档界面设计等内容。本节通过案例再来说明界面设计的基本方法。
[例]编写一个能启动小小记事本、画图、计算器及其它程序的小软件。要求小小记事本能进行简单的输入、编辑和存盘操作,画图、计算器及其它应用程序可以从windows平台中调用。
要求建立3个窗体文件,如图8.74所示:
图8.74 工程资源管理器
其中窗体form3作为主窗体,用来列出小小记事本、画图、计算器及其它程序的界面,并启动这些程序。MDIform1窗体用来实现小小记事本程序的功能,能新建、保存文档,能进行移动、复制等编辑操作,其中form2是用来作为文档窗体的样本窗体。详细的设计过程如下:
(一)建立程序的主界面form3。
1.界面设计。如图8.75所示建立界面。
图8.75 程序主界面
界面窗体中包含四个按钮和一个通用对话框控件,其属性设置见表,其中通用对话框控件的添加可通过“工程”菜单中的“部件”命令,在对话框中添加“Microsoft common dialog control
表8.35 窗体上的对象及其属性设置
控件对象或窗体 |
name |
Caption |
窗体 |
Form3 |
程序列表 |
按钮1 |
Command1 |
小小记事本 |
按钮2 |
command2 |
画图程序 |
按钮3 |
Command3 |
计算器程序 |
按钮4 |
Command4 |
其它程序 |
通用对话框 |
CommonDialog1 |
2.代码的添加
将以下代码添加到代码窗口中。
Private Sub Command1_Click()
MDIForm1.Show
End Sub
‘以上启动小小记事本程序
Private Sub Command2_Click()
Shell App.Path & "\mspaint.exe"
End Sub
‘该过程启动画图程序
Private Sub Command3_Click()
Shell App.Path & "\calc.exe"
End Sub
‘该过程启动计算器程序
Private Sub Command4_Click()
CommonDialog1.ShowOpen
Shell CommonDialog1.FileName
End Sub
‘该过程启动在打开对话框中所选择的程序
其中画图和计算器是windows中的附带程序,我们将这两个程序复制到了教学事例所在的文件夹。小小记事本程序是自建的一个小程序。
为了能在工程的运行中首先启动该欢迎界面,要在工程资源管理器中将该窗体设置为启动窗体。
(二)建立小小记事本程序的主界面MDIform1。
小小记事本程序的主界面设计如图8.76所示,窗体上建立一个菜单,并添加一个通对话框控件。
图8.76 小小记事本程序的主界面
窗体上各对象的属性设置见下表:
表8.36 表其属性设置
控件对象或窗体 |
name |
Caption |
autoshowchildren |
窗体 |
Mdiform1 |
小小记事本 |
True |
通用对话框 |
CommonDialog1 |
||
菜单 |
详见表 |
1.添加MDI窗体。在“工程”菜单下,选择“添加MDI窗体”命令,弹出“添加MDI窗体”对话框,选择“MDI窗体”选项,再单击“打开”按钮,建立新的MDI窗体,或把鼠标指向“Microsoft Visual Basic”窗口右侧“工程”窗口中的工程名,单击右键,弹出快捷菜单,从中选择“添加”命令,再从下一级菜单中选择“添加MDI窗体”命令。这时,添加了一个MDI窗体,既是MDI父窗体。
2.添加菜单。切换到对象窗口,执行“工具”菜单中的“菜单编辑器”,建立如图8.77所示的菜单。
图8.77 菜单编辑器
菜单及各菜单项的属性设置见下表:
表8.37 菜单及各菜单项的属性设置
标题 |
名称 |
文件(&F) |
file |
……新建(&N) |
New |
……保存(&S) |
Save |
……关闭(&C) |
Close |
……退出(&Q) |
Exit |
编辑(&E) |
Edit |
……剪切(&J) |
Cut |
……复制(&F) |
Copy |
……粘贴(&N) |
Paste |
窗口(&W) |
Windows |
……层叠(&C) |
Cd |
……水平平铺(&S) |
Sppp |
……垂直平铺(&Z) |
czpp |
菜单项前有“……”表示是下一级子菜单。
3.添加通用对话框控件commondialog1,方法同上。
4.给窗体添加代码。
Dim st As String
Dim i As Integer
Private Sub cd_Click()
MDIForm1.Arrange 0
End Sub
Private Sub czpp_Click()
MDIForm1.Arrange 2
End Sub
Private Sub sppp_Click()
MDIForm1.Arrange 1
End Sub
Private Sub exit_Click()
End
End Sub
Private Sub MDIForm_Load()
Load Form2
i = 0
End Sub
Private Sub close_Click()
If i <> 0 Then
Unload MDIForm1.ActiveForm
i = i - 1
End If
End Sub
Private Sub Copy_Click()
st = MDIForm1.ActiveForm.txtNoteEdit.SelText
'将选中的内容存放到st变量中
MDIForm1.copy.Enabled = False
'进行复制后,剪切和复制按钮无效
MDIForm1.cut.Enabled = False
MDIForm1.paste.Enabled = True
'粘贴按钮有效
End Sub
Private Sub Cut_Click()
st = MDIForm1.ActiveForm.txtNoteEdit.SelText
'将选中的内容存放到st变量中
MDIForm1.ActiveForm.txtNoteEdit.SelText = ""
'将选中的内容清除,实现了剪切
MDIForm1.copy.Enabled = False
MDIForm1.cut.Enabled = False
MDIForm1.paste.Enabled = True
End Sub
Private Sub new_Click()
i = i + 1
Dim myform As New Form2
myform.Show
myform.Caption = "文档" & i
End Sub
Private Sub Paste_Click()
' 将st变量中的内容插入到光标所在的位置,实现了粘贴
MDIForm1.ActiveForm.txtNoteEdit.Text=_
Left(MDIForm1.ActiveForm.txtNoteEdit,_ MDIForm1.ActiveForm.txtNoteEdit.SelStart) _
+ st + Mid(MDIForm1.ActiveForm.txtNoteEdit,_
MDIForm1.ActiveForm.txtNoteEdit.SelStart + 1)
End Sub
Private Sub save_Click()
CommonDialog1.Filter = "文本文件(*.txt)|*.txt| _
doc文档|*.doc"
CommonDialog1.FilterIndex = 1
CommonDialog1.ShowSave
Open CommonDialog1.FileName For Output As #1
Print #1, MDIForm1.ActiveForm.txtNoteEdit.Text
Close #1
End Sub
(三)建立样本窗体form2。
因为小小记事本程序可以建立多个文档窗体,但这些文档窗体都基于一个样本窗体,都是其副本。该窗体包含一个文本框,其界面如图8.78所示:
图8.78 样本窗体
窗体上各对象的属性设置见下表。
表8.38 窗体上各对象的属性设置
控件对象或窗体 |
name |
Caption |
Mdichild |
multiline |
窗体 |
Mdiform1 |
文档0 |
True |
|
文本框 |
txtNoteEdit |
true |
代码如下:
Private Sub Form_Load() '设置剪切、复制、粘贴按钮无效
MDIForm1.cut.Enabled = False
MDIForm1.copy.Enabled = False
MDIForm1.paste.Enabled = False
End Sub
Private Sub txtNoteEdit_MouseMove(Button As Integer, Shift As Integer, X As Single, _
Y As Single)
If txtNoteEdit.SelText <> "" Then
MDIForm1.cut.Enabled = True
' 当拖动鼠标选中要操作的文本后,剪切、复制按钮有效
MDIForm1.copy.Enabled = True
MDIForm1.paste.Enabled = False
Else
MDIForm1.cut.Enabled = False
' 当拖动鼠标未选中文本,剪切、复制按钮无效
MDIForm1.copy.Enabled = False
MDIForm1.paste.Enabled = True
End If
End Sub