编程学习biancheng.45soft.com 本站提供了各种在线教程和资料,供大家学习与参考.
编程学习
当前位置: 主页 > VB6 > 界面设计 > VB6 界面设计 动态菜单

VB6 界面设计 动态菜单

在程序运行时,要根据情况随时增减菜单,如“文件”菜单能保留最近打开的文件数。那就如同使用控件数组一样,要使用菜单控件数组。


建立步骤:

1.在菜单设计时,加入一个菜单项(有菜单名称,没有菜单标题),将其索引 (Index) 项属性设置为0(菜单数组),可见(Visual)项属性设置为False(不要打勾)。

2.在程序运行时,通过Load方法向菜单数组增加新的菜单项。使用Unload方法在菜单数组中减少菜单项。

[ 例8.7] 在例8.6中的文件菜单中保留最近打开的文件清单。


在文件菜单的“退出”选项后面(或前面)插入一个菜单项RunMenu,设置其索引属性为0,使RunMenu成为菜单数组,设置其Visible属性设置为False,再插入一个名为Bar3的分割线,也设置其Visible属性也设置为False。在顶层菜单的最后加入名称为MenuDel,标题为“删除菜单项”的菜单。


假定要保留的文件清单限定为4个文件名,用Load方法向RunMenu()数组加入动态菜单成员。


本程序具有删除动态菜单,打开由动态菜单指定的文件,按先进先出原则调整动态菜单的显示数量(观察打开文件菜单变化),具有记忆最近打开过的文件功能(参见退出菜单)。

Dim iMenucount%, st As String   'iMenucount 菜单总数
Private Sub EditCopy_Click()
    st = Text1.SelText   '将选中的内容存放到st变量中
    EditCopy.Enabled = False   '进行复制后,剪切和复制菜单无效
    EditCut.Enabled = False
    EditPaste.Enabled = True   '粘贴菜单有效
End Sub

Private Sub EditCut_Click()
    st = Text1.SelText    '将选中的内容存放到st变量中
    Text1.SelText = ""    '将选中的内容清除,实现了剪切
    EditCopy.Enabled = False
    EditCut.Enabled = False
    EditPaste.Enabled = True
End Sub
Private Sub EditPaste_Click()
    Text1.Text = Left(Text1, Text1.SelStart) + st + Mid(Text1, Text1.SelStart + 1)
End Sub

Private Sub FileExit_Click() '退出菜单
  Open "dymenu.txt" For Output As #1
  Write #1, iMenucount              '保留已打开的文件的个数和它们的名字
    For i = 1 To iMenucount
   Write #1, RunMenu(i).Caption
    Next i
  Close #1
    End
End Sub

Private Sub FileOpen_Click()
    Dim k%      '打开文件菜单事件
    On Error GoTo nofile              ' 设置错误陷阱
    CommonDialog1.InitDir = app.path ' 设置初始路径属性(可以在设计中完成)
    CommonDialog1.Filter = "工程文件| *.vbp|窗体文件|*.frm|文本文件|*.txt"
    CommonDialog1.CancelError = True
    CommonDialog1.ShowOpen()                    ' 或用Action = 1
    Text1.Text = ""
    Open CommonDialog1.FileName For Input As #1  ' 打开文件进行读操作
    Do While Not EOF(1)
        Line Input #1, inputdata         ' 读一行数据
        Text1.Text = Text1.Text + inputdata + Chr(13) + Chr(10)
    Loop
    Close #1                              ' 关闭文件
    iMenucount = iMenucount + 1 '菜单计数增1
    If iMenucount < 5 Then
        bar3.Visible = True
        Load(RunMenu(iMenucount))        ' 装入新菜单项
        RunMenu(iMenucount).Caption = CommonDialog1.FileName '给菜单制定标题
        RunMenu(iMenucount).Visible = True  '让菜单可见
    Else
        For k = 2 To 4 '先进先出,调整显示的动态菜单
            RunMenu(k - 1).Caption = RunMenu(k).Caption
        Next k
        RunMenu(4).Caption = CommonDialog1.FileName
        iMenucount = 4
    End If
    Exit Sub
nofile:  ' 错误处理
    If Err.Number = 32755 Then Exit Sub ' 单击"取消"按钮
End Sub

Private Sub Form_Load()
    On Error GoTo HAND  '产生错误,跳到错误处理程序段
Open "dymenu.txt" For Input As #1
 Input #1, iMenucount   '恢复已打开的文件(动态菜单)iMenucount为总文件个数
    If iMenucount <> 0 Then bar3.Visible = True '分割线菜单可见
    For i = 1 To iMenucount
    Input #1, MenuName
        Load(RunMenu(i))
        RunMenu(i).Visible = True
        RunMenu(i).Caption = MenuName
    Next i
  Close #1
    Exit Sub
HAND:
End Sub

'打开动态菜单(单击动态菜单某项)所指的文件
Private Sub RunMenu_Click(ByVal k As Integer)
 Open RunMenu(k).Caption For Input As #1  ' 打开文件进行读操作
    Text1.Text = ""
    Do While Not EOF(1)
       Line Input #1, inputdata          ' 读一行数据
        Text1.Text = Text1.Text + inputdata + Chr(13) + Chr(10)
    Loop
    Close #1
End Sub
Private Sub MenuDel_Click() '删除动态菜。从最后项删除单击一次删除一个
    If iMenucount > 0 Then
        Unload(RunMenu(iMenucount))         ' 删除动态菜单项
iMenucount = iMenucount – 1
    End If
    If iMenucount = 0 Then bar3.Visible = False
End Sub

如果要删除动态菜单中指定的某一项,则可这样编写:

Private Sub MenuDel_Click()
    Dim n%, i%
    n = Val(InputBox(" 删除第几项"))
    If n > iMenucount Or n < 1 Then
        MsgBox("输入无效", vbCritical)
        Exit Sub
    End If
    For i = n To iMenucount - 1
        RunMenu(i).Caption = RunMenu(i + 1).Caption
    Next i
    Unload(RunMenu(iMenucount))
    iMenucount = iMenucount - 1
    If iMenucount = 0 Then bar3.Visible = False
End Sub



编程学习 VB6 界面设计 动态菜单 转载请保留此行.谢谢.

VB6