Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


36897 / 76732 ←次へ | 前へ→

【45010】Re:隠しメソッド/プロパティの作り方
質問  TOSHI  - 06/12/9(土) 23:14 -

引用なし
パスワード
   ▼ichinose さん:
ありがとうございます。
この方法は、目からうろこ状態でした、レイトバインディング
による手法で、clsにタイプライブラリ情報を持たせない手法なんですね。


贅沢な希望なのですが、わたしの方の希望としましては、
2つ有ります。
 1.Fucn2からClass1のPrivate関数をCallしたい
 2.できれば1つのClassで実現したい

1に関してはichinoseさんの方法を使用させていただきまして
イベント追加し実現できました
そのコードが以下になります。

2ですが、私の方で、attribute を使用して一つのClassで
隠蔽する方法がないか調べてました。
海外のHPに”Hidden Property”というのが有りまして
クラスモジュールをエクスポートした後に隠蔽したいコレクション
アイテムプロパティを以下のように書き換え、再度インポートすれば
よいような事が書いてあり私もこれをヒントに、コレクションでなく任意の
Publicメンバ関数やプロパティに利用できるか試してみましたがだめでした。
以下が、そのコレクションの隠蔽?になります。
(済みません私もよく判らないので日本語がおかしいです。
 申し訳ないです)
この側面から隠しメソッドができないかなと考えて、いろいろ数値
を変えたり、違うAttributeを探して試したましがギブアップしてしまいました。
Public Property Get Items( _
) As IUnknown

'Attribute Items.VB_UserMemId = -4
'Attribute Items.VB_MemberFlags = "40"

' this property allows you to enumerate
' this collection with the For...Each syntax
Set Items= m_colItems.[_NewEnum]

End Property


以下が、1を実現したコードです。
'----------------Class1--------------------------------
Option Explicit

Private WithEvents cls As Class2
'==================================================
Public Sub Func1()
 MsgBox "Func1!"
End Sub
'==================================================
Property Get Raw() As Object
  Set Raw = cls
End Property
'==================================================
Private Sub Class_Initialize()
  Set cls = New Class2
End Sub
'==================================================
Private Sub Class_Terminate()
  Set cls = Nothing
End Sub

Private Sub Func2Private()
  
  MsgBox "Func2Private!"

End Sub

Private Sub cls_Func2()
  Call Func2Private
End Sub

-------------------------------------------------

'----------------Class2--------------------------------
Option Explicit
Public Event Func2()


Public Sub Func2()
  
  RaiseEvent Func2
  MsgBox "Func2!"
  
End Sub
'------------------------------------------------------

'----------標準モジュール-------------------------------
Dim クラスAs New Class1

Sub test()
  クラス.Func1 'ここでは、Func1はメンバーリストに入っている
  HDW.Raw.Func2 'イベント経由でClass2からClass1のプライベイト
         '関数をCall
End Sub
'------------------------------------------------------------
1 hits

【44997】隠しメソッド/プロパティの作り方 TOSHI 06/12/9(土) 12:57 質問
【45005】Re:隠しメソッド/プロパティの作り方 ichinose 06/12/9(土) 20:29 発言
【45010】Re:隠しメソッド/プロパティの作り方 TOSHI 06/12/9(土) 23:14 質問
【45015】Re:隠しメソッド/プロパティの作り方 再投... ichinose 06/12/10(日) 8:44 発言
【45020】Re:隠しメソッド/プロパティの作り方 再投... TOSHI 06/12/10(日) 11:42 お礼
【45022】隠しメソッド/プロパティの作り方 再質問 TOSHI 06/12/10(日) 12:38 質問
【45031】Re:隠しメソッド/プロパティの作り方 再質... ichinose 06/12/10(日) 16:40 発言
【45036】ありがとうございました TOSHI 06/12/10(日) 18:38 お礼

36897 / 76732 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free