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如何扩展 导航栏 工具栏 右键菜单 插件的更多相关文章

  1. 『练手』003 Laura.SqlForever如何扩展 兼容更多数据库引擎

     003 Laura.SqlForever如何扩展 兼容更多数据库引擎 数据库引擎插件 在 界面上的体现 导航窗体 的 工具栏 中的 引擎下拉列表        导航窗体 的 树形控件 中的 引擎主节 ...

  2. 『练手』005 Laura.SqlForever历史遗留 的 架构思想缺陷

    005 Laura.SqlForever历史遗留 的 架构思想缺陷 我们 比较一下 Laura.WinFramework 和 Laura.XtraFramework 的差异: Laura.WinFra ...

  3. 『练手』001 Laura.SqlForever架构基础(Laura.XtraFramework 的变迁)

    001 Laura.SqlForever架构的基础(Laura.XtraFramework 的变迁之路) Laura.XtraFramework 到底是 做什么的? Laura.XtraFramewo ...

  4. 『练手』手写一个独立Json算法 JsonHelper

    背景: > 一直使用 Newtonsoft.Json.dll 也算挺稳定的. > 但这个框架也挺闹心的: > 1.影响编译失败:https://www.cnblogs.com/zih ...

  5. 『练手』通过注册表 获取 VS 和 SQLServer 文件路径

    获取任意 VS 和 SQLServer 的 磁盘安装目录. 背景需求:如果磁盘电脑安装了 VS 或者 SQLServer 则 认定这台计算机 的使用者 是一名 软件研发人员,则让程序 以最高权限运行. ...

  6. 『集群』004 Slithice 集群分布式(多个客户端,基于中央服务器的集群服务)

    Slithice 集群分布式(多个客户端,基于中央服务器的多个集群服务端) 案例Demo展示: 集群架构图 如下: 如上图,上图 展示了 这个集群 的 结构: >一个中央服务器(可以有多个),负 ...

  7. 『开源』仿SQLServer山寨一个 跨数据库客户端

    002 Laura.SqlForever项目简单介绍 相关文章 <『练手』001 Laura.SqlForever架构基础(Laura.XtraFramework 的变迁)> <『练 ...

  8. [日推荐] 『闲聊助手』人工智能小程序,仅此一款!-极乐商店store.dreawer.com

    肾phone的siri有用过吗?小编无聊时就撩一下她!但有个问题就是要是没有肾phone在身边怎么撩???现在有伙伴@wx_Volcano_Li76 开发一款小程序,可以等同于siri,想什么时候撩就 ...

  9. 关于『进击的Markdown』:第三弹

    关于『进击的Markdown』:第三弹 建议缩放90%食用 我与神明画押,赌这弹markdown又双叒叕拖稿了 %%%Markdown!我的CSDN编辑器崩了呜呜呜 各路英雄豪杰,大家好!  我们要开 ...

随机推荐

  1. Postman 使用详解

    转自: http://blog.csdn.net/flowerspring/article/details/52774399 Postman 使用详解 阅读 6754收藏 3022016-6-9 作者 ...

  2. 关于Kafka日志留存策略的讨论

    关于Kafka日志留存(log retention)策略的介绍,网上已有很多文章.不过目前其策略已然发生了一些变化,故本文针对较新版本的Kafka做一次统一的讨论.如果没有显式说明,本文一律以Kafk ...

  3. CSS技术实例1-使用CSS计数器实现数值计算小游戏实例页面

    一 实例要达到的要求如图所示: 二 分析 1.7个圆角矩形标签(或按钮) 2. 点击触发并开始运算,最后一个标签显示结果 3.计算成功后弹出"万岁"字眼 三 代码实现 关键CSS代 ...

  4. bzoj5252 [2018多省省队联测]林克卡特树

    斜率优化树形dp?? 我们先将问题转化成在树上选K+1条互不相交路径,使其权值和最大. 然后我们考虑60分的dp,直接维护每个点子树内选了几条路径,然后该点和0/1/2条路径相连 然后我们会发现最后的 ...

  5. 权限系统与RBAC模型概述[绝对经典]

    0. 前言 一年前,我负责的一个项目中需要权限管理.当时凭着自己的逻辑设计出了一套权限管理模型,基本原理与RBAC非常相似,只是过于简陋.当时google了一些权限管理的资料,从中了解到早就有了RBA ...

  6. create react app 项目部署在Spring(Tomcat)项目中

    网上看了许多,大多数都是nginx做成静态项目,但是这样局限性太多,与Web项目相比许多服务端想做的验证都很麻烦,于是开始了艰难的探索之路,终于在不经意间试出来了,一把辛酸... 正常的打包就不说了. ...

  7. Python 命令行(CLI)基础库

    在 CLI 下写 UI 应用 前阵子看了一下自己去年写的 Python-视频转字符动画,感觉好糗..所以几乎把整篇文章重写了一遍.并使用 curses 库实现字符动画的播放. 但是感觉,curses ...

  8. 【SAP业务模式】之STO(二):系统配置

    本篇博文开始讲述STO业务模式的配置! 一.定义发货工厂的装运数据: 目录:SPRO-物料管理-采购-采购订单-设置库存调拨订单-定义工厂的装运数据 定义发货工厂的装运数据: 为收货工厂分配客户代码: ...

  9. ie兼容问题记录

    工作中遇到的ie网站兼容性问题  头疼.......... 以下为从网上搜索学习的整理兼容性方法 用于自己记录 #兼容问题 ##css hack: https://blog.csdn.net/fres ...

  10. 如何看MySql执行计划explain(或desc)

    简介 MySQL 提供了一个 EXPLAIN 命令, 它可以对 SELECT 语句进行分析, 并输出 SELECT 执行的详细信息, 以供开发人员针对性优化.EXPLAIN 命令用法十分简单, 在 S ...