我目前正在用C#开发一个WinForms应用程序,需要一些关于如何管理工具栏按钮,菜单和其他上下文敏感元素的输入。这是什么最好的做法?
我在MSDN上发现了文章“Use Design Patterns to Simplify the Relationship Between Menus and Form Elements in .NET”但我不确定是否有更好的方法,因为这篇文章很旧(它于2002年发布)。
感谢任何建设性的帮助。
答案 0 :(得分:1)
在开发事件密集型应用程序(许多菜单,多种形式的工具栏)时,通常会有某些事件重叠或重复,因为有很多方法可以做某件事,我看到这个冗余对用户有利,但对开发人员来说却是一种祸害。
精心规划的面向对象方法将决定如何管理事件触发的操作,以避免重复或重叠的代码。
答案 1 :(得分:0)
你当然可以在Microsoft Office中找到一个非常有用的灵感来源,因为它是一个标准(标准?)。
根据您使用的表单类型,我猜您可以设置一些基本规则,例如数据输入表单将具有基本菜单,例如validate \ quit \ refresh \ abandon \ print \ export to excel \ filter \等于\等。这些菜单(让我们称之为“标准”)将在“文件”和\或“编辑”和\或“查看”菜单控件下理想地可用,坚持标准的Office菜单(甚至Firefox使用)这个术语)。
我建议您总是显示此标准菜单,即使某些操作并非总是可用于此类或此类表单。想象一下,在某些情况下,您的某个表单中包含的数据无法更新:您仍然可以显示“验证”图标的禁用版本,而不是使其不可见。这肯定会让最终用户更容易理解。
一旦建立了这个标准的菜单/选项列表,我猜你会找到其他两个主要的“菜单”系列,“详细信息”菜单和“操作“菜单:
您的不同菜单应通过命令栏和上下文相关的快捷方式提供。 “过滤器”等选项可以在绑定控件级别使用,而“发送PO”等操作仅在记录/表单级别可用。
然后,允许或不允许人员或一群人打开表格和/或对这些表格采取特定行动
为了管理菜单和权限,我们的应用程序在客户端有一个默认的“菜单文件”,在服务器端有一个“userGroup-forms”和“userGroup-actions”表。
连接到数据库时,将标识用户并更新其本地菜单文件以向其提供相应的查看/操作权限。
我们显然是面向对象的方法,不是吗?
答案 2 :(得分:0)
ToolStripManager类有一个Merge方法,因此您可以让任何子窗体/用户控件公开自己的ToolStrips,当它们具有焦点时,它们会与主窗体的工具条合并。
http://msdn.microsoft.com/en-us/library/5523fet0.aspx
如果您使用的是MDI,您还可以合并父表格和子表单的菜单项。
http://msdn.microsoft.com/en-us/library/ms404319%28VS.80%29.aspx