zoukankan      html  css  js  c++  java
  • WPS JSA 宏编程(JS):7.用户窗体

    一、与 VBA 窗体的差异

    WPS JSA 也提供了用户窗体,用户也可以通过拖控件的方式,制作自己的对话框,以完成宏编程中的交互任务。

    但它与 VBA 中的用户窗体有很大的不同:

    1. 界面与事件逻辑分离,界面元素的绘制是一个模块,事件逻辑放在之外的模块,不是嵌入到窗体界面模块的。
    2. 界面元素的 Name 属性不可修改,属性编辑器中也不提供这个属性。虽然在官方文档上说的是支持修改,但从 JSA 事件订阅入口,即可知道,Name 属性可能在以后的升级版本中也无法修改,因为它的名称不变,才能方便事件订阅,也就是事件订阅机制锁死了这方面的改进的可能性。
    1. 界面对象绘制完成后,它是一个实例,不是一个类型,不允许使用 new 语句,来构造它的新实例
    2. 只有顶级容器,也就是窗体本身有 Controls 成员,且它是一个方法,不是集合,它只接受字符串的 Name 参数,不接受 Index 参数,且 Name 参数不可省,无法直接得到整个子控件集合
    1. 因为无法得到整个子控件集合,也就无法对它进行动态的添加控件
    2. 控件元素都有 Move(Left, Top, Width, Height) 方法,窃以为拆分成 Move(Left, Top)Resize(Width, Height),更符合逻辑
    1. 再没有 Load/Unload 了,都是 Show()/Hide() 方法,这很好,这是面向对象的。
    2. 新增了 HLayout/VLayout/HSpacer/VSpacer 控件,用来协助布局控件,有了它们你可以更方便地拖控件了

     

    二、吐槽

    1. 相较于 VBA 的用户窗体,JSA 的用户窗体太死板了,主要体现在:
      1. 不能对控件集合,动态增删新控件,动态性太差,想要玩儿点花活儿,比如按需求动态生成界面,是不可能的。当然,就这一点而言,因为这只是初版,也许以后升级可以支持这个,这本身也不会破坏现有的规则。只需要在不给 Controls(Name) 传递参数时,返回整个控件集合就好,这样就可以在这个集合上进行动态增删控件了。也即只需要增量改进即可,其它容器控件添加上 Controls(Name) 方法,也不是难事儿。
      2. 修改控件元素的 Name 是无效的,简单的界面还好,控件多了,分组多了,很容易乱套
      1. 创建的窗体界面,它不是一个类型,而是一个实例,不允许new 出新实例,这一点都不面向对象
    1. ZOrder 或者BringToFront()/SendToBack(),都不支持,控件堆叠是不可能的了
    2. CommandButton 的类型实际上是 PushButton,连官方文档上都是 CommandButton,这叫用户如何是从啊。而且直接访问这个 PushButton 也是不存在的,而且 CommandButton 也不存在

     

    三、总结

    基于以上了解,JSA 的用户窗体,还非常初级,死板而孱弱,功能也不健全。直接用基于网页的 HTA 都要比它强。

    还不如直接在文档中使用代码绘制控件,用这种方式封装出一个库,也比现在这个要强,要好用。

    渣渣渣。。。也就将将满足可用,远远谈不上强大,更没有任何灵活性。

    希望官方推倒重来,这套界面,无论是类型系统,还是窗体模块的组织形式,事件的订阅机制,整个都太差劲了,远古 UI 也比这个健全、强大吧。

    .NET WinForm 风格的 UI 就很不错,既灵活,又强大。建议用这套风格实现一套 UI。

  • 相关阅读:
    Solution: Win 10 和 Ubuntu 16.04 LTS双系统, Win 10 不能从grub启动
    在Ubuntu上如何往fcitx里添加输入法
    LaTeX 笔记---Q&A
    Hong Kong Regional Online Preliminary 2016 C. Classrooms
    Codeforces 711E ZS and The Birthday Paradox
    poj 2342 anniversary party
    poj 1088 滑雪
    poj 2479 maximum sum
    poj 2481 cows
    poj 2352 stars
  • 原文地址:https://www.cnblogs.com/nutix/p/15231178.html
Copyright © 2011-2022 走看看