适用于 Windows.Forms 的操作列表






4.79/5 (38投票s)
为 Windows.Forms 实现 Delphi 的 ActionList
引言
.Net 框架确实是一个不错的框架,但作为一名来自 MFC 世界的程序员,我真的很怀念一些功能,例如 ON_COMMAND
/ON_UPDATE_COMMAND_UI
机制。
这种机制允许解耦 UI 和与之关联的代码。它允许
- 自动在菜单、工具栏、按钮和其他控件之间共享代码。
- 减少更新 UI 所需的代码量。
- 根据与 UI 无关的条件启用/禁用控件(例如,连接到数据库)。
不幸的是,ON_COMMAND
/ON_UPDATE_COMMAND_UI
机制是一种基于消息的机制,它严重依赖于特定的消息路由架构。这种机制可以在 .Net 环境中重现,但它远非在 RAD 环境中可行的解决方案。一个不错的替代方案是 Delphi 提供的 ActionList
组件。
一个 ActionList
是 Action
的集合。每个 Action
本身是一个与给定任务关联的组件。一个 Action
提供了框架,用于
- 响应 UI 事件来执行任务。
- 根据某些条件启用/禁用、选中/取消选中与任务相关的控件。
- 设置控件的文本。
- 设置控件的帮助文本。
- 显示/隐藏控件。
- 设置与控件关联的图标。
- 设置与任务关联的快捷键。
将操作添加到您的项目
这是一个基于演示应用程序的“查找”对话框的简单示例。我们将添加一个与“查找”按钮关联的操作。
- 在设计模式下打开您的对话框。
- 将
CDiese
库的组件添加到工具箱。 - 将一个
ActionList
拖动到对话框上 - 编辑新
ActionList
的Actions
属性。添加一个新的Action
并设置其属性。 - 在组件编辑器中选择该操作,并为
Execute
和Update
事件添加一个EventHandler
。private void OnUpdateFind(object sender, System.EventArgs e) { ((CDiese.Actions.Action)sender).Enabled = _text.TextLength > 0; }
private void OnFind(object sender, System.EventArgs e) { RichTextBoxFinds mode = RichTextBoxFinds.None; if (_bCase.Checked) { mode |= RichTextBoxFinds.MatchCase; } .... _RTF.Select(sel, _text.Text.Length); _RTF.ScrollToCaret(); }
- 将操作与“查找”按钮关联
最新更新
- 2002 年 3 月 4 日
- 首次发布
