1. 程式人生 > 其它 >WPS JSA 巨集程式設計(JS):7.使用者窗體

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 也比這個健全、強大。