65.9K
CodeProject 正在变化。 阅读更多。
Home

适用于 Windows.Forms 的操作列表

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.79/5 (38投票s)

2002 年 3 月 3 日

CPOL

2分钟阅读

viewsIcon

183795

downloadIcon

4260

为 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 组件。

一个 ActionListAction 的集合。每个 Action 本身是一个与给定任务关联的组件。一个 Action 提供了框架,用于

  • 响应 UI 事件来执行任务。
  • 根据某些条件启用/禁用、选中/取消选中与任务相关的控件。
此外,这种机制可以扩展,以便
  • 设置控件的文本。
  • 设置控件的帮助文本。
  • 显示/隐藏控件。
  • 设置与控件关联的图标。
  • 设置与任务关联的快捷键。

将操作添加到您的项目

这是一个基于演示应用程序的“查找”对话框的简单示例。我们将添加一个与“查找”按钮关联的操作。

  1. 在设计模式下打开您的对话框。
  2. CDiese 库的组件添加到工具箱。
  3. 将一个 ActionList 拖动到对话框上
  4. 编辑新 ActionListActions 属性。添加一个新的 Action 并设置其属性。
  5. 在组件编辑器中选择该操作,并为 ExecuteUpdate 事件添加一个 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();
    }
    
  6. 将操作与“查找”按钮关联

最新更新

  • 2002 年 3 月 4 日
    • 首次发布
Serge
© . All rights reserved.