『练手』004 Laura.SqlForever如何扩展 导航栏 工具栏 右键菜单 插件
004 Laura.SqlForever如何扩展 导航栏 工具栏 右键菜单 插件
导航栏 插件扩展
比如下图的 窗口 > 关闭所有文档 这个导航栏;

在 任何程序集,任何命名空间,任何类名 扩展类似插件:

代码详解:
特性标签: Key: 唯一键值(同名键值 会以 Important 权重,相互覆盖)
ParentKey: 父级键值
GroupKey: 在导航栏中,某些 选项按钮 存在分组,这个值 就是 分组用的
Order: 排序值(降序)
TriggerType: 触发窗体类型(即 这个 选项是 为 哪一类 窗体服务的——支持基类)
BarItemType: 是 导航栏 还是 工具栏
判断启用函数:Must 和 CanUse 这两个 函数基本算是 历史遗留 —— 但不是错误,且依然有效!
>Must 是 当前扩展 启用底限 —— 只有满足 Must 条件,才能启用;
>CanUse 是 当前扩展 启用状态 —— 比方说,对应窗体改变,而 影响 当前扩展 启用状态;
>上面的代码 Must 函数中,判断 当前扩展 只为 MainForm 服务;
>但是 特性标签 中 TriggerType 已经写明:触发类型 为 MainForm —— 即 判断重复。
>这个 判断重复 是 Laura.XtraFramework 升级时留下的,作者很懒。
触发事件委托:BarItemHandler 实现了 当前扩展 在界面上 被 单击时 的触发事件;
>导航栏、工具栏 更多的是 按钮型选项;
>如果 你的 当前扩展 在 导航栏、工具栏 不是一个 按钮 —— 而是一个 下拉列表 等 特殊模式呢?
>BarItemInfoBase 基类 已经预留了函数,这里只简单介绍,具体实现 各位有兴趣就阅读源码咯:
>改写 SelfHandler 属性,直接 返回 true —— 当前扩展 自己处理事件(不麻烦 架构参与);
>改写 GetUI 函数,这个函数 默认返回 按钮类型 —— 你可以自定义 返回 下拉列表类型;
>Ps. GetUI 函数,支持 当前选项的 子级控制 —— GetUI 是 完全自由 的;
工具栏 插件扩展
比如下图的 脚本执行窗体 > 链接数据库引擎 这个 工具栏按钮;

在 任何程序集,任何命名空间,任何类名 扩展类似插件:

右键菜单 插件扩展
我们这里 以 树形导航 中的 节点的 右键举例

在 任何程序集,任何命名空间,任何类名 扩展类似插件:

代码详解
>特性 + 基类: 这个 和上面 主要 思想是类似的;但是没有 TriggerType;
>Must + CanUse 函数: 控制 当前扩展 的启用状态;
>MenuStripHandler 委托: 右键菜单 的 触发事件;
>历史遗留:
>基类 MenuStripItemBase,特性 MenuStripAttribute
在 Laura.WinFramework 中 导航栏 、 右键菜单 都可以使用;
但在 Luara.Windows.XtraForms 中仅 右键菜单 可以使用(现在的 导航栏扩展 上面已经介绍);
> 这种历史 遗留,完全是 底层布局控件库 的不同而导致,确也无奈;
历史遗留的 工具栏扩展
上面已经介绍:
>Laura.WinFramework: 导航栏+右键菜单(MenuStripItemBase) 工具栏(ToolStripItemBase)
>Laura.XtraFramework: 导航栏+工具栏(BarItemInfoBase) 右键菜单(历史MenuStripItemBase)
特殊工具栏(历史 ToolStripItemBase)
为什么 还要保留 历史工具栏扩展:
>看图说话:

>红色区域 里面的是 最新的 BarItemInfoBase 扩展的工具栏;
>蓝色区域 里面的是 历史的 ToolStripItemBase 扩展的工具栏;
> DevExpress 控件库 扩展工具栏 需要引用 太多组件 —— 用到 蓝色区域 反而显得庞大,不够简洁;
>历史 的 工具栏扩展方式 反而在这里 显得简单 —— 于是 最后还是将 历史的工具栏 予以了保留;
最后
在 Laura.SqlForever 的 升级,扩展 过程中,终究 有所剥夺,也有所增添。
为了 Laura.XtraFramework 稳定 和 强大,一些 之前思想 终究 保留了下来。
这些 历史遗留 我们在 《005 Laura.SqlForever历史遗留 的 架构思想缺陷.doc》中再 详细指出。
舒小龙
2014-02-13 00:12
『练手』004 Laura.SqlForever如何扩展 导航栏 工具栏 右键菜单 插件的更多相关文章
- 『练手』003 Laura.SqlForever如何扩展 兼容更多数据库引擎
003 Laura.SqlForever如何扩展 兼容更多数据库引擎 数据库引擎插件 在 界面上的体现 导航窗体 的 工具栏 中的 引擎下拉列表 导航窗体 的 树形控件 中的 引擎主节 ...
- 『练手』005 Laura.SqlForever历史遗留 的 架构思想缺陷
005 Laura.SqlForever历史遗留 的 架构思想缺陷 我们 比较一下 Laura.WinFramework 和 Laura.XtraFramework 的差异: Laura.WinFra ...
- 『练手』001 Laura.SqlForever架构基础(Laura.XtraFramework 的变迁)
001 Laura.SqlForever架构的基础(Laura.XtraFramework 的变迁之路) Laura.XtraFramework 到底是 做什么的? Laura.XtraFramewo ...
- 『练手』手写一个独立Json算法 JsonHelper
背景: > 一直使用 Newtonsoft.Json.dll 也算挺稳定的. > 但这个框架也挺闹心的: > 1.影响编译失败:https://www.cnblogs.com/zih ...
- 『练手』通过注册表 获取 VS 和 SQLServer 文件路径
获取任意 VS 和 SQLServer 的 磁盘安装目录. 背景需求:如果磁盘电脑安装了 VS 或者 SQLServer 则 认定这台计算机 的使用者 是一名 软件研发人员,则让程序 以最高权限运行. ...
- 『集群』004 Slithice 集群分布式(多个客户端,基于中央服务器的集群服务)
Slithice 集群分布式(多个客户端,基于中央服务器的多个集群服务端) 案例Demo展示: 集群架构图 如下: 如上图,上图 展示了 这个集群 的 结构: >一个中央服务器(可以有多个),负 ...
- 『开源』仿SQLServer山寨一个 跨数据库客户端
002 Laura.SqlForever项目简单介绍 相关文章 <『练手』001 Laura.SqlForever架构基础(Laura.XtraFramework 的变迁)> <『练 ...
- [日推荐] 『闲聊助手』人工智能小程序,仅此一款!-极乐商店store.dreawer.com
肾phone的siri有用过吗?小编无聊时就撩一下她!但有个问题就是要是没有肾phone在身边怎么撩???现在有伙伴@wx_Volcano_Li76 开发一款小程序,可以等同于siri,想什么时候撩就 ...
- 关于『进击的Markdown』:第三弹
关于『进击的Markdown』:第三弹 建议缩放90%食用 我与神明画押,赌这弹markdown又双叒叕拖稿了 %%%Markdown!我的CSDN编辑器崩了呜呜呜 各路英雄豪杰,大家好! 我们要开 ...
随机推荐
- Protostuff序列化分析
前言最近项目中需要将业务对象直接序列化,然后存数据库:考虑到序列化.反序列化的时间以及生产文件的大小觉得Protobuf是一个很好的选择,但是Protobuf有的问题就是需要有一个.proto的描述文 ...
- MySQL 慢查询日志总结
慢查询日志概念 MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阀值的语句,具体指运行时间超过long_query_time值的SQL,则会被记录到慢查询日志 ...
- 第三方库API接口
第三方库API接口 InfluxDB提供了各种语言的Http API接口的封装.具体可以看这里: https://docs.influxdata.com/influxdb/v0.10/clients/ ...
- FTP连接池
我们项目使用的是 Apache的(commons-net-3.2.jar) FTPClient,但是系统偶尔会有异常,趁着刚解决完,总结一下. 日志中提示是类似 java.lang.Exception ...
- uiautomator——简单的将自动化测试与截图对比相结合使用的小例子!
1.在使用uiautomator进行自动化测试过程当中,执行某些动作之后,要进行判断是否已执行的动作成功时,需要添加检查点来判断,因此添加判断点除了使用id.text.view等方式进行之外,存在一种 ...
- 教你如何使用Java手写一个基于链表的队列
在上一篇博客[教你如何使用Java手写一个基于数组的队列]中已经介绍了队列,以及Java语言中对队列的实现,对队列不是很了解的可以我上一篇文章.那么,现在就直接进入主题吧. 这篇博客主要讲解的是如何使 ...
- C语言memcpy函数的用法
介绍 memcpy是memory copy的缩写,意为内存复制,在写C语言程序的时候,我们常常会用到它.它的函原型如下: void *memcpy(void *dest, const void *sr ...
- FOFA爬虫大法——API的简单利用
FOFA是一款网络空间搜索引擎,它通过进行网络空间测绘,帮助研究人员或者企业迅速进行网络资产匹配,例如进行漏洞影响范围分析.应用分布统计.应用流行度等. 何为API?如果你在百度百科上搜索,你会得到如 ...
- Android进程间通信(一):AIDL使用详解
一.概述 AIDL是Android Interface Definition Language的缩写,即Android接口定义语言.它是Android的进程间通信比较常用的一种方式. Android中 ...
- 从零到一详聊如何创建Vue工程及遇到的常见问题
前言 本文也会在github上我的web-study仓库中同步更新,欢迎star. 戳这里,传送 准备工作 判断是否需要FQ或安装镜像,镜像一般可安装国内淘宝镜像,详情可看这里:cnpm npm in ...