首先请在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相关执行文件,查看带Trayform的配置

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.EasyWinFormView

Ligg.EasyWinApp-102-Ligg.EasyWinForm:Function--ControlBox、Tray、Resize、Menu的更多相关文章

  1. ajax:error:function (XMLHttpRequest, textStatus, errorThrown) 中status、readyState和textStatus状态意义

    textStatus: "timeout", 超时 "error", 出错 "notmodified" , 未修改 "parser ...

  2. php自定义排序数组usort和uasort(uasort保持索引关联)(usort($arr, "cmp");)(比较函数时很普通函数的写法:function cmp($a, $b))

    php自定义排序数组usort和uasort(uasort保持索引关联)(usort($arr, "cmp");)(比较函数时很普通函数的写法:function cmp($a, $ ...

  3. Ligg.EasyWinApp-100-Ligg.EasyWinForm:一款Winform应用编程框架和UI库介绍

        本项目是一个Winform应用编程框架和UI库.通过这个该框架,不需任何代码,通过XML配置文件,搭建任意复杂的Windows应用界面,以类似Execel公式的方式实现基本的过程控制(赋值.条 ...

  4. Ligg.EasyWinApp-10300-Ligg.EasyWinForm:View的配置

    View的配置文件,  路径如下: .\Applications\xxxx(Apllication)\Clients\Form\Functions\yyyy(Function)\ Views\zzzz ...

  5. LiggEasyWinApp-103-Ligg.EasyWinForm:View

    首先请在VS里打开下面的文件,我们将对源码分段进行说明: View(视图):一个Function(功能)对应多个View(视图),本框架用View(视图)实现多窗体(MDI)的效果. 一个View(视 ...

  6. 原生JS:Function对象(apply、call、bind)详解

    Function对象(apply.call.bind) 原创文章,转摘请注明出处:苏福:http://www.cnblogs.com/susufufu/p/5850180.html 本文参考MDN做的 ...

  7. ES6新特性:Function函数扩展, 扩展到看不懂

    本文所有Demo的运行环境为nodeJS, 参考:让nodeJS支持ES6的词法----babel的安装和使用 : 函数的默认值: 如果有参数 ,那就用参数, 如果没有参数, 那就用默认的参数: aj ...

  8. 为什么这样写js:(function ($) { })(jQuery);

    很多时候,会这样写js,比如公司的项目里面的js页面都这样,所以我就想搞清楚意思: <script language="javascript" type="text ...

  9. 一起Polyfill系列:Function.prototype.bind的四个阶段

    昨天边参考es5-shim边自己实现Function.prototype.bind,发现有不少以前忽视了的地方,这里就作为一个小总结吧. 一.Function.prototype.bind的作用 其实 ...

随机推荐

  1. 时至今日,我们应该承认.Net目前的状况实在堪忧

    一:  .Net之前 .Net 经历了多年的锤炼,语言特性本身非常优雅和完善,也是非常甜品的一种语言 二:  .Net现状 但是与此同时,.Net的生态日益糟糕,困扰着广大.Neter 三:   .N ...

  2. 洛谷 题解 P5595 【【XR-4】歌唱比赛】

    本蒟蒻又双叒叕被爆踩了. 考试时一遍过 其实这题还是很简单的,难度不会大于普及组T1. CSP 2019 RP++ 看开始看到题目,觉得特别长,不想看... 我来和你们分析分析题目,你们就都可以秒了. ...

  3. ThinkPHP的视图和模板

    简单来说一个控制器对应一个视图,一个方法对应一个模板下面我们直接上图. 二.给模板赋值 给模板赋值在这里用到了assign()这个函数,assign()函数第一个参数为给这个值自定义名称,第二个参数则 ...

  4. “Unknown class XXViewController in Interface Builder file.”问题处理

    在静态库中写了一个XXViewController类,然后在主工程的xib中,将xib的类指定为XXViewController,程序运行时,报了如下错误: “Unknown class XXView ...

  5. html格式化输出JSON( 测试接口)

    将 json 数据以美观的缩进格式显示出来,借助最简单的 JSON.stringify 函数就可以了,因为此函数还有不常用的后面2个参数. 见MDN https://developer.mozilla ...

  6. Create an Embedded Framework in Xcode with Swift

    转自:http://zappdesigntemplates.com/create-an-embedded-framework-in-xcode-with-swift/ Post Series: Cre ...

  7. [TimLinux] Python 迭代器(iterator)和生成器(generator)

    1. 可迭代对象 from collection import Iterable class Iterable(metaclass=ABCMeta): ... def __iter__(self): ...

  8. ARTS-S 获取子线程返回值注意事项

    #include <stdio.h> #include <stdlib.h> #include <pthread.h> #include <unistd.h& ...

  9. 小白进阶—python中os模块用法

    一.os模块概述 python中的os 模块包含普遍的操作系统功能,这个模块不受平台限制,即windows和linux上都适用. 二.常用方法 1.os.name 返回正在使用的平台.如果是windo ...

  10. moment.js 默认使用服务器时间

    在前端使用Date对象获取当前时间的时候,该时间是客户端的时间.但是该时间可以被用户修改,所以我们一般情况下并不想要这个时间.如果每一次获取时间的时候都请求一下服务器,那么将会对服务器造成不必要的压力 ...