(1)通用过程的代码设计
文件操作通用过程(有关文件的具体操作没有给出,学习完第九章相关知识后,可自行补充):
Private i As Integer
Public Sub FileNew()
Dim NewFrm As New frmNotePad ' 声明并创建一个NewFrm 窗体变量
i = i + 1
NewFrm.Caption = \无标题\& i ' 显示新的子窗体 NewFrm.Show End Sub
Public Sub FileOpen()
Dim NewFrm As New frmNotePad
frmMDI.CommonDialog1.FileName = \
frmMDI.CommonDialog1.ShowOpen ' 显示“打开”对话框 If frmMDI.CommonDialog1.FileName <> \Then '调用打开过程(待补) End If
NewFrm.Caption = frmMDI.CommonDialog1.FileTitle ' 修改文档的标题 NewFrm.Show End Sub
Public Sub FileSave(strFileName)
If Left(strFileName, 3) = \无标题\Then
frmMDI.CommonDialog1.FileName = \无标题.txt\
frmMDI.CommonDialog1.ShowSave ' 显示“另存为”对话框 strFileName = frmMDI.CommonDialog1.FileName End If
If strFileName <> \Then
'调用保存过程(待补)
frmMDI.ActiveForm.Caption = frmMDI.CommonDialog1.FileTitle End If End Sub
编辑操作通用过程: Sub CopyProc()
' 复制活动子窗体有焦点控件上被选择的文本到剪贴板
Clipboard.SetText frmMDI.ActiveForm.ActiveControl.SelText End Sub
Sub CutProc()
Clipboard.SetText frmMDI.ActiveForm.ActiveControl.SelText frmMDI.ActiveForm.ActiveControl.SelText = \
End Sub
Sub PasteProc()
' 将文本从剪贴板粘贴到活动控件上
frmMDI.ActiveForm.ActiveControl.SelText = Clipboard.GetText() End Sub
(2)MDI窗体代码设计: Private Sub MenuNew_Click() Call Module1.FileNew End Sub
Private Sub MenuOpen_Click() Call Module1.FileOpen End Sub
Private Sub MenuExit_Click() End
End Sub
(3)子窗体代码设计:
Private flag As Boolean Private Sub Form_Load()
Text1.Height = Me.ScaleHeight ' 修改文本框大小,适应窗体尺寸的变化
Text1.Width = Me.ScaleWidth End Sub
Private Sub Text1_Change()
flag = True ' 设置全局变量来标志文本已经改变 End Sub
“文件”菜单的事件过程代码: Private Sub MenuNew_Click()
Call Module1.FileNew ' 调用新建窗体过程 End Sub
Private Sub MenuOpen_Click()
Call Module1.FileOpen ' 调用文件打开过程 End Sub
Private Sub MenuSave_Click()
Call Module1.FileSave(Me.Caption) ' 调用文件保存过程 flag = False End Sub
Private Sub MenuSaveAs_Click()
Call Module1.FileSave(\无标题\ ' 调用文件保存过程 flag = False End Sub
Private Sub MenuClose_Click()
Unload Me ' 卸载子窗体 End Sub
Private Sub MenuExit_Click()
Unload frmMDI ' 卸载MDI窗体 End Sub
' 根据flag标志变量的值,如果为True,即文本改动后未保存,会提示用户保存变化
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer) Dim StrMsg As String
Dim intResponse As Integer If flag Then
StrMsg = \& Me.Caption & \中文本已经改变,\& vbCrLf & \保存改变吗?\
intResponse = MsgBox(StrMsg, 35, frmMDI.Caption) Select Case intResponse
Case 6 ' 用户选择“是”
Call Module1.FileSave(frmMDI.ActiveForm.Caption) Case 7 ' 用户选择“否”,卸载窗体 Cancel = False
Case 2 ' 用户选择“取消”,取消卸载 Cancel = True End Select End If End Sub
“编辑”菜单的事件代码: Private Sub MenuCopy_Click()
Call Module1.CopyProc ' 调用复制过程 End Sub
Private Sub MenuCut_Click()
Call Module1.CutProc ' 调用剪切过程 End Sub
Private Sub MenuPaste_Click()
Call Module1.PasteProc ' 调用粘贴过程
End Sub
Private Sub MenuDel_Click()
frmMDI.ActiveForm.ActiveControl.SelText = \ End Sub
Private Sub MenuSelectAll_Click()
frmMDI.ActiveForm.Text1.SelStart = 0
frmMDI.ActiveForm.Text1.SelLength = Len(frmMDI.ActiveForm.Text1.Text)
End Sub
“搜索”菜单事件代码:
Private Sub MenuFind_Click()
If Me.Text1.SelText <> \Then
' 如果子窗体文本框中有文本,将它赋给“查找”窗体中的文本 frmFIND.TxtFind.Text = Me.Text1.SelText Else
frmFIND.TxtFind.Text = \ End If
frmFIND.Show vbModal End Sub
“窗口”菜单事件代码:
Private Sub MenuCascade_Click()
frmMDI.Arrange vbCascade ' 层叠子窗体 End Sub
Private Sub MenuTile_Click()
frmMDI.Arrange vbTileHorizontal ' 平铺子窗体 End Sub
Private Sub MenuArrange_Click()
frmMDI.Arrange vbArrangeIcons ' 对最小化的子窗体排列图标 End Sub
(4)模式对话框窗体(frmFind)代码设计: Dim intPos As Integer, oldPos As Integer
Private Sub FindPos() ' 公共查找过程 Dim StrMsg As String
intPos = InStr(intPos + 1, frmMDI.ActiveForm.ActiveControl.Text, TxtFind.Text)
If intPos Then
frmMDI.ActiveForm.ActiveControl.SelStart = intPos - 1
frmMDI.ActiveForm.ActiveControl.SelLength = Len(TxtFind.Text) Else
If oldPos > 1 Then
StrMsg = \已经到文件尾\
frmMDI.ActiveForm.ActiveControl.SelLength = 0 Else
StrMsg = \找不到\& Chr(34) & TxtFind.Text & Chr(34) End If
MsgBox StrMsg, 0, frmMDI.Caption End If End Sub
Private Sub CmdFind_Click()
FindPos ' 调用公共查找过程 End Sub
Private Sub CmdFindNext_Click()
oldPos = intPos ' 记录原来的值,可以判定是否第一次找到
FindPos ' 调用公共查找过程 End Sub
Private Sub Form_Load() ' 窗体初始化时,设置“查找”按钮无效 CmdFind.Enabled = False End Sub
Private Sub TxtFind_Change()
If TxtFind.Text = \Then ' 如果“查找内容”文本框为空,“查找”按钮无效
CmdFind.Enabled = False Else
CmdFind.Enabled = True End If End Sub
Private Sub CmdCancel_Click()
Unload frmFIND ' 卸载查找窗体 End Sub
4.运行程序
设置本工程的“启动对象”为MDIForm1,启动本工程。
习题六
一、简答题
1.菜单的主要作用是什么?Visual Basic提供了什么类型的菜单? 2.热键和快捷键的区别是什么?如何为一个菜单设置热键和快捷键? 3.什么是弹出式菜单?用什么方法显示弹出式菜单?