主页VB中的常用控件分为两类:一是标准控件,二是ActiveX控件。默认情况下工具箱中只有标准控件,用户也可通过“工程”菜单中的“部件”命令添加所需的ActiveX控件。主页第11章菜单程序设计VisualBasic中的菜单菜单编辑器用菜单编辑器建立菜单菜单项的增减弹出式菜单菜单项的控制本章主要内容退出主页11.1VisualBasic中的菜单应用程序通过菜单为用户提供一组命令菜单一般分为两种:下拉式菜单和弹出式菜单下拉式菜单下拉式菜单基本结构包括:顶层菜单、菜单项和子菜单子菜单项子菜单提示符访问键快捷键分隔线复选标记菜单项顶层菜单主页11.2菜单编辑器设计菜单的工具——菜单编辑器可以有4种方式进入菜单编辑器⑴执行“工具”菜单中的“菜单编辑器”命令。⑵使用热键Ctrl+E。⑶单击工具栏中的“菜单编辑器”按钮。⑷在要建立菜单的窗体上单击鼠标右键,将弹出一个菜单,然后单击“菜单编辑器”命令。主页11.2菜单编辑器设计菜单的工具——菜单编辑器菜单编辑器分为上、中、下三部分,上半部分是数据区用来设置属性,中间部分是编辑区,用来对输入的菜单进行编辑;下半部分是菜单显示区,用来显示用户输入的菜单内容。主页11.2菜单编辑器只有当某个窗体为活动时,才能打开菜单编辑器窗口。1.数据区用来输入或修改菜单项、设置属性。分为标题、名称、索引、快捷键、帮助上下文、协调位置、复选、有效、可见和显示窗口列表等栏目。2.编辑区有左右箭头,上下箭头,下一个、插入和删除7个按钮,用来对输入的菜单进行简单的编辑。菜单在数据区输入,在菜单项显示区显示。3.菜单项显示区位于菜单编辑器窗口的下部,输入的菜单在这里显示出来,并通过内缩符号(…)表明菜单项的层次。条形光标所在的菜单项是“当前菜单项”。除分隔线以外的所有菜单元素都能识别Click事件主页例11.1编一程序,进行两个操作数的算术运算练习设计步骤如下:(1)创建应用程序的用户界面和设置对象属性菜单栏向用户提供功能选择,包括运算数的位数,运算符类型(加、减、乘)和退出程序菜单设计各个菜单项名称例11.111.3菜单编辑器主页11.3菜单编辑器分类标题名称内缩符号热键主菜单项1位数mnu10无无子菜单项1一位数mnu111Ctrl+A子菜单项2二位数mnu121Ctrl+B子菜单项3三位数mnu131Ctrl+C主菜单项2运算mnu20无无子菜单项1加法mnu211Ctrl+D子菜单项2减法mnu221Ctrl+E子菜单项3乘法mnu231Ctrl+F主菜单项3退出mnu30无无各菜单项的属性主页(2)编写程序代码OptionExplicit‘规定所有变量都要显式声明Dimsel1AsInteger,sel2AsStringDimr1AsLongPrivateSubForm_Load()sel1=0'位数标记sel2='运算标记RandomizeEndSubPrivateSubMnu11_Click()‘单击“一位数”菜单项sel1=1'设置位数标记EndSubPrivateSubMnu12_Click()‘单击“二位数”菜单项sel1=10EndSub主页PrivateSubMnu13_Click()‘单击“三位数”菜单项sel1=100EndSubPrivateSubMnu21_Click()‘单击“加法”菜单项sel2=+'设置运算标记EndSubPrivateSubMnu22_Click()‘单击“减法”菜单项sel2=-EndSubPrivateSubMnu23_Click()‘单击“乘法”菜单项sel2=*EndSub主页PrivateSubCommand1_Click()'命题按钮单击事件DimaAsLong,bAsLongIfsel1=0Orsel2=ThenMsgBox先选择运算数的位数和运算类型ExitSubEndIfa=sel1+Int(9*sel1*Rnd)‘根据指定位数,随机生成操作数b=sel1+Int(9*sel1*Rnd)Text1.Text=Str(a)+sel2+Str(b)+“=”‘根据操作数及运算类型组成算式SelectCasesel2‘根据运算类型,求运算结果r1Case+r1=a+bCase-r1=a-bCase*r1=a*bEndSelectText2.Text=Text2.SetFocusEndSub菜单操作后Sel1指定位数=1一位数=10二位数=100三位数Sel2指定运算类型=“+”加法=“-”减法=“*”乘法主页PrivateSubCommand2_Click()'答题按钮单击事件Dimr2AsLongIfText2.Text=ThenMsgBox请输入答案ExitSubEndIfr2=Val(Text2.Text)'读取用户的答案Ifr1=r2Then'判断答案MsgBox正确ElseMsgBox错误EndIfEndSubPrivateSubMnu30_Click()‘“退出”菜单命令EndEndSub主页11.4菜单项的控制有效性控制及菜单项标记菜单项的有效性是通过“有效”属性来控制的。设置方法为:菜单项名.Enable=False使菜单项失效。菜单项名.Enable=True使菜单项有效。菜单项标记—菜单项前面加一个“√”,有两个作用:⑴当前某个命令状态的“On”或“Off”;⑵表示当前选择的是哪个菜单项。菜单项标记通过菜单设计器窗口中的“复选”属性设置,该属性为True时,相应的菜单项前面有“√”标记;如果该属性为False时,相应的菜单项前面没有“√”标记主页设计步骤如下:(1)设计一个菜单,该菜单含有一个主菜单项和若干个子菜单项。当单击子菜单项时,分别显示十进制、八进制和十六进制数,并在相应的菜单项前面加上“√”标记。菜单设计各个菜单项名称例11.2例11.2菜单项前加“√”标记练习主页11.3菜单编辑器标题名称内缩符号复选显示数制Numsys无无八进制Octv1无十进制Dec1无十六进制Hexv1无清除Clean1有退出Quit1无各菜单项的属性主页(2)编写程序代码菜单项Octv的事件过程如下:PrivateSubOctv_Click()Answer=Val(txtBox.Text)Octv.Checked=TrueDec.Checked=FalseHexv.Checked=FalseClean.Checked=FalseQuit.Checked=FalseLabel5.Caption=Oct$(Answer)EndSub主页PrivateSubDec_Click()Answer=Val(txtBox.Text)Octv.Checked=FalseDec.Checked=TrueHexv.Checked=FalseClean.Checked=FalseQuit.Checked=FalseLabel4.Caption=Format(Answer)EndSubPrivateSubHexv_Click()Answer=Val(txtBox.Text)Octv.Checked=FalseDec.Checked=FalseHexv.Checked=TrueClean.Checked=FalseQuit.Checked=FalseLabel6.Caption=Hex$(Answer)EndSub主页子菜单项CleanPrivateSubClean_Click()txtBox.Text=Octv.Checked=FalseDec.Checked=FalseHexv.Checked=FalseClean.Checked=TrueQuit.Checked=FalseLabel4.Caption=Label5.Caption=Label6.Caption=EndSubPrivateSubQuit_Click()EndEndSub主页11.4菜单项的控制键盘控制用键盘选择菜单项通常有两种方法,即热键和访问键(AccessKey)。热键和访问键都是在设计菜单时直接指定。为了设置访问键必须在准备加下划线的字母的前面加上一个“&”。在设置访问键时,应注意避免重复。用热键可直接执行菜单命令,不必一级一级下拉菜单执行,执行速度较快。访问键就是菜单项中加了下划线的字母,只要按Alt和加了下划线的字母就可选择相应的菜单。必须一级一级地进行选择。任何控件可在Caption属性中加“&”设置访问键,也可在程序代码中设置。访问键只能是一个字符,而且这个字符必须是键盘上的某个键主页11.4菜单项的增减菜单项的增减通过控件数组来实现。一个控件数组含有若干个控件,这些控件的名称相同,但其中的每个元素都可以有自己的属性。与普通数组一样,通过下标(Index)访问控件数组中的元素。控件数组可以在运行时建立。主页设计步骤如下:(1)菜单项的增减通过控件数组来实现。例11.3例11.3编写程序,实现菜单项的增减操作。标题名称内缩符号可见性下标应用程序Apps无True无增加应用程序AddAp1True无减少应用程序DelAp1True无-SepBar1True无(空白)AppName1False0各菜单项的属性主页(2)编写程序代码在窗体层定义如下变量:DimMenucounterAsInteger单击AddAp时增加新菜单项,编写如下的事件过程PrivateSubAddAp_Click()msg$=Enterfilepath:Temp$=InputBox$(msg$,AddApplication)Menucounter=Menucounter+1LoadAppName(Menucounter)AppName(Menucounter).Caption=TempAppName(Menucounter).Visible=TrueEndSub主页单击子菜单项DeleteApPrivateSubDelAp_Click()DimNAsInteger,IAsIntegermsg$=Enternumbertodelete:N=InputBox(msg$,DeleteApplication)IfNMenucounterOrN1ThenMsgBox超出范围!ExitSubEndIfForI=NToMenucounter-1AppName(I).Caption=AppName(I+1).CaptionNextIUnloadAppName(Menucounter)Menucounter=Menucounter-1EndSubAppName的ClickPrivateSubAppName_Click(IndexAsInteger)x=Shell(AppName(Menucounter).Caption,1)EndSub主页11.6弹出式菜单弹出式菜单又称为快捷菜单。可以根据右击鼠标时的位置使用VB提供的菜单编辑器,把某个菜单设置成隐藏。(1)使用菜单编辑器设计菜单(2)设置顶层菜单项为不可见,即不选中菜单编辑器里的“可见”选项或在属性窗口中设定Visible属性为False(3)编写与弹出式菜单相关联的MouseUp(释放鼠标)事件过程。[对象]PopupMenu菜单名[,位置常数][,横坐标[,纵坐标]]]主页例11.4在例11.1的基础上,把“位数”菜单改为快捷菜单(1)打开例11.1的应用程序,选定窗体,然后在菜单编辑器中将“位数”菜单标题的“可见”框中的“√”取消(即不选中)(2)增加以下的MouseUp事件过程代码:PrivateSubForm_MouseUp(ButtonAsInteger,_ShiftAsInteger,XAsSingle,YAsSingle)IfButton=2Then‘检查是否右击,击左键为1PopupMenumnu10EndIfEndSub程序运行时,右击窗体空白处,即会弹出快捷菜单,如图11.12所示例11.4主页弹出式菜单主页11.7工具栏和状态栏(补充)分别通过ActiveX控件ToolBar和StatusBar来实现11.7.1ActiveX控件简介VB中使用