我该如何以合理的方式管理工具栏,菜单和上下文敏感元素?

时间:2009-09-21 19:17:39

标签: c# .net winforms user-interface

我目前正在用C#开发一个WinForms应用程序,需要一些关于如何管理工具栏按钮,菜单和其他上下文敏感元素的输入。这是什么最好的做法?

我在MSDN上发现了文章“Use Design Patterns to Simplify the Relationship Between Menus and Form Elements in .NET”但我不确定是否有更好的方法,因为这篇文章很旧(它于2002年发布)。

感谢任何建设性的帮助。

3 个答案:

答案 0 :(得分:1)

在开发事件密集型应用程序(许多菜单,多种形式的工具栏)时,通常会有某些事件重叠或重复,因为有很多方法可以做某件事,我看到这个冗余对用户有利,但对开发人员来说却是一种祸害。

精心规划的面向对象方法将决定如何管理事件触发的操作,以避免重复或重叠的代码。

答案 1 :(得分:0)

你当然可以在Microsoft Office中找到一个非常有用的灵感来源,因为它是一个标准(标准?)。

根据您使用的表单类型,我猜您可以设置一些基本规则,例如数据输入表单将具有基本菜单,例如validate \ quit \ refresh \ abandon \ print \ export to excel \ filter \等于\等。这些菜单(让我们称之为“标准”)将在“文件”和\或“编辑”和\或“查看”菜单控件下理想地可用,坚持标准的Office菜单(甚至Firefox使用)这个术语)。

我建议您总是显示此标准菜单,即使某些操作并非总是可用于此类或此类表单。想象一下,在某些情况下,您的某个表单中包含的数据无法更新:您仍然可以显示“验证”图标的禁用版本,而不是使其不可见。这肯定会让最终用户更容易理解。

一旦建立了这个标准的菜单/选项列表,我猜你会找到其他两个主要的“菜单”系列,“详细信息”菜单和“操作“菜单:

  • 详细信息菜单允许您导航 通过表格,访问/显示 数据的子表单/子集,例如 采购订单中的项目。
  • 操作菜单允许您对数据执行特定操作,例如发出采购订单。

您的不同菜单应通过命令栏和上下文相关的快捷方式提供。 “过滤器”等选项可以在绑定控件级别使用,而“发送PO”等操作仅在记录/表单级别可用。

然后,允许或不允许人员或一群人打开表格和/或对这些表格采取特定行动

为了管理菜单和权限,我们的应用程序在客户端有一个默认的“菜单文件”,在服务器端有一个“userGroup-forms”和“userGroup-actions”表。

  • 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