Ligg.EasyWinApp-102-Ligg.EasyWinForm:Function--ControlBox、Tray、Resize、Menu
首先请在VS里打开下面的文件,我们将对源码分段进行说明:

Function(功能):一个应用的功能界面,一个应用对应多个Function(功能);如某应用可分为管理员界面、用户界面。
首先我们来看一下继承关系
public partial class StartForm : FunctionForm
public partial class FunctionForm : FrameForm
StartForm是继承FunctionForm的,FunctionForm是继承FrameForm的。对UI操作大部分在FunctionForm上完成。
LoadForm方法里读取FunctionFormStyle
对于MultipleView从 .\Applications\xxxx(Apllication)\Clients\Form\Functions\yyyy(Function)\ FunctionFormStyle.xml读取FunctionFormStyle至_functionFormStyle。FunctionFormStyle 的各属性如下:

对于SingleView
从 .\Applications\xxxx(Apllication)\Clients\Form\Functions\yyyy(Function)\ Form\Zones\zzzz(Zone)\ Feature.xml读取FunctionFormStyle至_functionFormStyle
InitLayout方法
首先是确定Form的Text, 如果传参里包含了Text,就使用传参的,如果没有,就采用缺省的:就去里根据Function或Zone的Name去从 .\Applications\xxxx(Apllication)\abbrevAnnexes.xml读取。

然后确定ControlBox

然后确定Form的WindowState

然后确定Form的尺寸

然后确定Form的Icon

然后确定Form的Tray,是否把关闭按钮当作最小化按钮

下面的代码是在弹出一个Dialog时,让Dialog出现在中间靠上的位置

请至https://github.com/Liggin2019/Ligg.EasyWinApp/blob/master/demo/demo.rar下载,运行Form-MutiView-ITSmaoa-AdmKt0-CustMenu-AssignedTitle相关执行文件,查看Text由外部传参的配置。
Tray读取和显示(InitTray方法)
首先读取Tray的定义文件和Icon;对Multiple View在对于MultipleView从 .\Applications\xxxx(Apllication)\Clients\Form\Functions\yyyy(Function)\ TrayMenuItems.xml读取;对于SingleView
从 .\Applications\xxxx(Apllication)\Form\Functions\yyyy(Function)\Clients\ Form\Zones\zzzz(Zone)\ TrayMenuItems.xml读取

请至https://github.com/Liggin2019/Ligg.EasyWinApp/blob/master/demo/demo.rar下载,运行Form-MutiView-ITSmaoa-AdmKt1-CustMenu-Tray相关执行文件,查看带Tray的form的配置
ResizeRegion方法
FrameForm顾名思义是Form的框架,它首先横向切了5刀,把Form分为6个Section,如下:
MainMenuSection(Dock: Top)
ToolBarSection(Dock: Top)
ShortcutSection(Dock: Top)
NavigationSection(Dock: Top)
MainSection(Dock: Top)
RunningMessageSection(Dock: Down)
然后在每个Section上从左到右在切几刀,划分为不同的Region(Dock: Left或Right)。如下图:

以下代码初始化每个Section和Region是否显示,及其尺寸

例如:在https://github.com/Liggin2019/Ligg.EasyWinApp/blob/master/demo/demo.rar
_functionFormStyle.ResizeRegionParams=
”MainMenu:0;ToolBarSection:64,600,370;NavigationSection:0;ShortcutSection:0;MainSectionLeftNavDivision:0,0,0;MainSectionRightNavDivision:145,175,145;MainSectionMainDivision:130,0;MainSectionRightDivision:230,34,0;RunningMessageSection:0;RunningStatusSection:26,0;HorResizableDivisionStatus:none”
Menu的读取和显示
menu只在MutilpleView的情况下存在,有2种类型:
缺省(Simple)采用Winform自带的ToolStripMenuItem控件;另一种(Customized)是本框架在揣摩 SAP GUI和SEP客户端后独创一种以用View(视图)实现多窗体(MDI)的效果的菜单形式。

然后根据FunctionFormStyle.xml里的配置,决定采用哪一种菜单。
以下代码是在LoadForm方法里确定采用哪一种菜单类型:

以下代码是从配置文件.\Applications\xxxx(Apllication)\Clients\Form\Functions\yyyy(Function)\ MenuItems.xml读取菜单数据到_layoutElements

菜单配置文件里的元素包含以下类型:

- ViewMenuItem点击时会触发ViewMenuItemClickHandler,显示当前View,并隐藏前一个View。
- DisplayAndTransactionItem是会显示和带Action的菜单项,当点击时会触发ControlEventHandler并执行一个Act方法。
- TransactionOnlyItem不显示,只会被DisplayAndTransactionItem调用。
- DisplayOnlyItem只显示的菜单项,如分隔条。
- ViewMenuArea是一个Panel,是上述类型的容器,可以包含ViewMenuItem、DisplayAndTransactionItem、DisplayOnlyItem菜单项。
- ToolMenuArea是一个Panel,是上述类型的容器,可以包含DisplayAndTransactionItem、DisplayOnlyItem菜单项。
见以下示例:

ViewMenuArea包含的菜单项(Customized Menu)

ToolMenuArea包含的菜单项(Customized Menu)

ViewMenuArea包含的菜单项(Simple Menu)

ToolMenuArea包含的菜单项(Simple Menu)
以下代码确定当前显示的View,分几种情况:一种是RereshUi后重显(如登录后重显),一种是传参,一种是缺省(在配置文件MenuItems.xml里定义)

下面的代码就是分2种类型Render菜单,请大家自行阅读代码

请至https://github.com/Liggin2019/Ligg.EasyWinApp/blob/master/demo/demo.rar
下载,运行Form-MutiView-ITSmaoa-AdmKt1-CustMenu 和 Form-MutiView-ITSmaoa-AdmKt4-SimpMenu相关执行文件,查看2种不同菜单情况下的form的配置
点击ViewMenuItem显示和隐藏View、以及View下各个Zone的排列和传参,请看下一章节文档。
LiggEasyWinApp-103-Ligg.EasyWinForm:View
Ligg.EasyWinApp-102-Ligg.EasyWinForm:Function--ControlBox、Tray、Resize、Menu的更多相关文章
- ajax:error:function (XMLHttpRequest, textStatus, errorThrown) 中status、readyState和textStatus状态意义
textStatus: "timeout", 超时 "error", 出错 "notmodified" , 未修改 "parser ...
- php自定义排序数组usort和uasort(uasort保持索引关联)(usort($arr, "cmp");)(比较函数时很普通函数的写法:function cmp($a, $b))
php自定义排序数组usort和uasort(uasort保持索引关联)(usort($arr, "cmp");)(比较函数时很普通函数的写法:function cmp($a, $ ...
- Ligg.EasyWinApp-100-Ligg.EasyWinForm:一款Winform应用编程框架和UI库介绍
本项目是一个Winform应用编程框架和UI库.通过这个该框架,不需任何代码,通过XML配置文件,搭建任意复杂的Windows应用界面,以类似Execel公式的方式实现基本的过程控制(赋值.条 ...
- Ligg.EasyWinApp-10300-Ligg.EasyWinForm:View的配置
View的配置文件, 路径如下: .\Applications\xxxx(Apllication)\Clients\Form\Functions\yyyy(Function)\ Views\zzzz ...
- LiggEasyWinApp-103-Ligg.EasyWinForm:View
首先请在VS里打开下面的文件,我们将对源码分段进行说明: View(视图):一个Function(功能)对应多个View(视图),本框架用View(视图)实现多窗体(MDI)的效果. 一个View(视 ...
- 原生JS:Function对象(apply、call、bind)详解
Function对象(apply.call.bind) 原创文章,转摘请注明出处:苏福:http://www.cnblogs.com/susufufu/p/5850180.html 本文参考MDN做的 ...
- ES6新特性:Function函数扩展, 扩展到看不懂
本文所有Demo的运行环境为nodeJS, 参考:让nodeJS支持ES6的词法----babel的安装和使用 : 函数的默认值: 如果有参数 ,那就用参数, 如果没有参数, 那就用默认的参数: aj ...
- 为什么这样写js:(function ($) { })(jQuery);
很多时候,会这样写js,比如公司的项目里面的js页面都这样,所以我就想搞清楚意思: <script language="javascript" type="text ...
- 一起Polyfill系列:Function.prototype.bind的四个阶段
昨天边参考es5-shim边自己实现Function.prototype.bind,发现有不少以前忽视了的地方,这里就作为一个小总结吧. 一.Function.prototype.bind的作用 其实 ...
随机推荐
- Lua的面向对象,封装,继承,多态
概述 我们总所周知对象是由属性和方法组成的,要用lua要描述一个对象,也必然要有这两个特性,属性和方法.lua的基本结构是table,所以Lua的类,其实都是table,因为它可以存储普通的变量又可以 ...
- 关于非阻塞I/O、多路复用、epoll的杂谈
本文主要是想解答一下这样几个问题: - 什么是非阻塞I/O - 非阻塞I/O和异步I/O的区别 - epoll的工作原理 文件描述符 文件描述符在本文有多次出现,难免有的朋友不太熟悉,有必要简单说明一 ...
- 设计模式GOF23(创建型模式)
• 创建型模式: 单例模式.工厂模式.抽象工厂模式.建造者模式.原型模式. • 结构型模式: –适配器模式.桥接模式.装饰模式.组合模式.外观模式.享元模式.代理模式. • 行为型模式: 模 ...
- [Python Basics]下划线变量
夜暗归云绕柁牙,江涵星影鹭眠沙. 行人怅望苏台柳,曾与吴王扫落花. 我平时很常见到的带有下划线的python变量有两种: 前后双下划线,我之前的理解是python程序中的类似meta data的信息, ...
- ARTS-S c++调用pytorch接口
想跑通第1个参考资料上讲的例子,一定要注意gcc和gperftools的版本.因为LibTorch用了c++17的over-aligned新特性. centos默认的gcc是4.8.5不支持这个新特性 ...
- Nginx的事件循环
首先事件循环的起点就是监听端口获取连接,我们可以在ngx_event_core_module模块的ngx_event_process_init函数中看到如下的代码: /* for each liste ...
- BGA256芯片植球全过程体验(原创)
今天工具到位,迫不亟待,需要对手上的BGA256的FPGA芯片进行植球, 该芯片买来的时候是有球的,只是在焊接后,由于电路板故障或焊接问题,需要拆下来芯片,导致球损失,需要重新植球. 一般植球都是将所 ...
- NIO-SocketChannel源码分析
目录 NIO-SocketChannel源码分析 目录 前言 ServerSocketChannelImpl 创建ServerSocketChannel 绑定和监听 接收 SocketChannelI ...
- 初探three.js几何体
今天说说three.js的几何体,常见的几何体今天就不说了,今天说一说如何画直线,圆弧线,以及高级几何体. 1. 画一条直线 画直线我们使用THREE.Geometry()对象. //给空白几何体添加 ...
- pringboot热部署导致applicationContext获取为空
在项目中遇到一个很奇怪的问题,写了一个SpringContextUtil工具类来获取applicationContext,初始化的时候断点来看的确是初始化了,applicationContext对象不 ...