- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第5章 窗体界面设计.ppt
第5章 窗体界面设计 本章要点: 高级的可视化程序设计 深入理解事件驱动模型 动态生成窗体控件 遍历、搜索的方法 5.1 菜单的使用和动态菜单 菜单在每个软件中都会见到,大体来说分为两种:窗体中的主菜单(MainMenu)和单击鼠标右键调出的上下文菜单(ContextMenu)。这两者在Windows Forms中都有现成的控件可用,而且由于其优良的设计,这两者的用法基本相同。 一个菜单可以看成是一棵树:它拥有很多个菜单项,而每个菜单项下面又可以有自己的菜单项,这样才得以建立出经常见到的多级菜单,如图5.1就是一个典型的例子。 这里【格式】是主菜单中的一个菜单项,其下又有【对齐】、【使大小相同】等菜单项,而在【垂直间距】菜单项下还有菜单项……可以如此不停地重复下去。 之所以要在这里费如此多的功夫来讲解这些大家可能已经很熟悉的概念,完全是因为澄清这些概念对于使用Windows Forms有很大的好处。一个MainMenu(或者ContextMenu,两者用起来非常相似)代表一个主菜单(或上下文菜单),它包含了一个MenuItems集合,这个集合中的每一个元素都是一个MenuItem,代表一个菜单项;每一个MenuItem中又有自己的MenuItems集合,包含它自身的子菜单项……这种设计使得处理每一个菜单项的方式几乎完全一致,也可以方便地应用树的算法来对菜单做各种操作。后面将会看到这样的例子。 在本案例中,我们将使用“全动态”的方式,在运行时刻交互地生成新菜单项。新菜单项的文字、位置和行为都可以由用户指定。 5.1.1 动态生成菜单 建立一个新的Windows窗体应用程序Case5_1,首先加入一个MainMenu控件。一般来说一个窗体只有一个主菜单,所以可直接把它命名为MainMenu。 MainMenu本身是一个不可见控件,它会出现在窗体下方的不可见控件区。但是加入它之后,窗体的上部会出现类似菜单的东西,可以在其中直接输入菜单项的文字。这是Visual Studio .NET提供的新的“菜单编辑器”。 5.1.2 程序运行 按F5键运行程序。 在程序启动时,窗体上只有3个不能展开的菜单项,在TreeView中也可以看到这种结构。 在文本框中输入一些文字,如“菜单1”;然后在“行为”栏中任意选择一项,如ShowHello,它使菜单项被单击以后弹出“Hello”对话框;最后在“添加到”栏中选择一项,如“菜单2”(注意,这个操作顺序不可违反);单击【添加菜单项】按钮,会看到新菜单项已经被加入到主菜单中,而TreeView中也及时地反映了这种变化。 如果单击这个新加的菜单项,将会看到“Hello”对话框。 当然,还可以继续添加,不仅是在原有的菜单项下,还可以在新加入的菜单项下,这种过程可以无限地重复。如果添加的时候选择了其他行为,如ShowMenuItemText,单击菜单项时就会弹出它自身的文字。 5.1.3 算法解释 单击【添加菜单项】按钮之后,新菜单项是如何被加入到菜单中的呢? Dim correspondingMenuItem, newMenuItem As MenuItem correspondingMenuItem = FindMenuItem(treAddTo.SelectedNode) newMenuItem = New MenuItem(txtNewText.Text) If lstBehavior.SelectedIndex = 0 Then AddHandler newMenuItem.Click, Handlers(lstBehavior.SelectedIndex) End If correspondingMenuItem.MenuItems.Add(newMenuItem) 首先使用FindMenuItem函数找到应该添加的位置,也就是用户在TreeView中选择的节点所对应的菜单项。关于FindMenuItem的实现,后面会讲解。 接着用用户输入的文字生成新的菜单项。MenuItem的构造函数有好几个,在这里使用的函数只需要传入菜单项文字。 接下来用AddHandler语句,将用户选择的行为与newMenuItem的Click事件关联起来。AddHandler是一个语句,它的作用就是将事件与事件处理程序相关联。这种关联还可以用RemoveHandler语句来去除。注意这两个都不是函数,所以不要加括号。 最后,把新的菜单项加入到它该去的位置。正如前面所说,本例中使用了MenuItems集合,这是一个MenuItemCollection类型的集合,它拥有一般集合所拥有的方法,如Add,Remove等。 菜单加入以后,用MenuItemToNode过程重新建立Tr
您可能关注的文档
最近下载
- 具有SIZE结构生物种群系统的建模、分析.pdf VIP
- 医院输血管理委员会年终工作总结.pptx VIP
- 人工智能在初中英语写作教学中的生成式策略研究教学研究课题报告.docx
- Haier海尔冰箱BCD-452WDPF说明书使用安装手册参数图解图示pdf电子版下载.pdf VIP
- 人教版高中物理必修一课件.pptx VIP
- 山东省青岛市2018年九年级数学上学期9月月考试题新人教版.doc VIP
- 第3课 追求人生理想-【中职专用】2024年中职思想政治《哲学与人生》金牌课件(高教版2023·基础模块).pptx VIP
- 商品混凝土供货服务方案.docx VIP
- 成品混合验证方案.doc VIP
- GZ012 水利工程BIM建模与应用赛题模块1第1套(公开).pdf VIP
文档评论(0)