請問在UC 設計時,要怎麼將自行定義的Type 指定給 屬性讓設計者使用呢? 就是說小弟先在程式中設定。
Public Type A
Caption as string
 Tag as string
End Type
然後再指定給
Public Property Get Buttons(Index as long) as A
Buttons = lbl.XXX  <--- 請問要怎麼做呢??
End Property
不知這樣的方法要怎麼來運作呢??
創作者介紹

小吳 VBQA 程式設計討論

vbqa 發表在 痞客邦 PIXNET 留言(8) 人氣()


留言列表 (8)

發表留言
  • franma
  • 小弟試了以後,發現功能上只能唯讀,而不能進行寫入。所以 還是不行用吧??
  • ChrisTorng
  • 不然改用物件類別配合屬性來當作一個 type。
  • Ader
  • 各位好, 我也遇到與 franma君 類似的問題:
    在物件類別模組中:
    Public Type tpyStage
    Tag As String     '識別/參考用 ex: "K162-100" , "K501-60"
      OrgMethord As Integer '原點復歸方式 1 ~ 6
      PosUnit As Integer   '位置單位 ex: 0 (mm) , 1 (°)
      Unit2Pulse As Single  '單位比例 ex: 0.004 (mm/Pulse) , 0.0032 (°/Pulse)
      PosMin As Single    '位置最小值 ex: 0 (mm) , -8 (°)
      PosMax As Single    '位置最大值 ex: 100 (mm) , 8 (°)
      ISpeed As Long     '初始速度 (pps)
      DSpeed As Long     '驅動速度 (pps)
      ARate As Integer    '加/減速率 (pps)
        
      Position As Single   '目前位置
      '... 族繁不及備載
    End Type
    Private m_Stage(1 To 12) As tpyStage
    也是如 franma君 一樣只能提供唯讀屬性:
    Property Get Stage(Axis As Integer) As tpyStage
    Stage = m_Stage(Axis)
    End Property
    Property Let 就沒辦法寫了...
    ChrisTorng君 是指另外建一個物件類別, 把原 Type 成員寫成新物件類別的屬性嗎? 可惜我 Try 了一整天還是因為陣列的關係無法成功.
    我知道是有變通的方法:
    Property Let Stages(NewData As Variant)
    m_Stage() = NewData
    End Property
    可是使用上就非常不方便, 不小心使用還會發生問題,
    請問各位前輩, 除了幫各個 Type 成員一一分別寫 Property Get/Let 外(好累啊), 是否還有方法可以達成陣列屬性?
    謝謝!
  • Franma
  • to ader 兄!
    您可以用 CT 大大說的方式!
    小弟是使用 class 存放這些的屬性來存取!而使用 collection 來存放 class 來達到 上述的效果!
  • Ader
  • 我複述一遍, 您看對不對:
    在使用該 Type 的 ClassModule 所屬的 ActiveX Dll 裡再新增一個 ClassModule , 把原 Type 的成員改為新 ClassModule 的屬性.
    假設我上例 tpyStage 改為 clsStage ClassModule, 用 Collection.Add 加入 clsStage, Collection.Item(x) 方式存取, 是這樣子嗎?
    可是寫到 Collection.Item(x). 不會自動列出成員, 使用上不就和把 tpyStage 陣列存入 Variant 變數一樣非常不方便, 不小心使用還會發生問題? 我想我的難處在於要寫一個由 "ActiveX Dll" 提供 "使用者自訂型態" "陣列" 的 "屬性" 供引用的專案可以 "方便" 的使用... (另一個難處是一口氣念完這句話 Bp)
    或是, 如果方便的話煩請以幾行程式碼示範您解決的方法?
    謝謝!
  • Franma
  • 小弟還在想,怎麼不見了。原來跑到這麼後面了~~@@ 小弟現在才看到!
    >>>可是寫到 Collection.Item(x). 不會自動列出成員
    可以列出相關的成員。小弟已經實作出來了! 而且可以依不同的成員有不同的形態

    Ader兄,基本上您說的沒有錯! 只不過,小弟不太了解您是說 引用專案什麼的??
    關於程式結構的話!我稍後回 ^^
  • Franma
  • 所有的過程都不直接使用collection ,因為 collection 只是個中介存放的容器。 這樣就能做出 自動列出成員的動作了!
    關於 item 和 add 的 function 要自行寫。 當然您也可以加入其他的 防呆程式碼,或是其他的程式。
    小弟是
    public property get item(index as variant) as clsObject
    ^^^^^^^^^^^^^^^^
                  這是讓item 變身成 class 並有其相關成員!
       set item = collection(index)
    end property
    public function Add(optiona Caption as string ,.,.,.,.....) as clsObjext
    dim o as new clsObjexct
      
       o.caption = caption
       ...
       ...
       ...
       collection.add o

    set add =o  '<-- 可以不傳 (當時測試時加的,記得可以拿掉)
    end function

  • Ader
  • 仿照您的範例寫了一些測試, 成功了!
    多虧您熱心地提供上面的關鍵程式碼才讓我的使腦筋豁然開朗.
    真謝謝您啦!
找更多相關文章與討論