[リストへもどる]
一括表示

投稿時間:2003/02/21(Fri) 10:58
投稿者名:mai
Eメール:
URL :
タイトル:
クラスモジュール
初めまして

さっそく質問なんですが、クラスモジュールからフォームにcallしたいのですが
どう書けばいいのか分かりません。

-----クラスモジュール(Class1)------
Sub aaa()
  Call From1.ccc          ←?????
End Sub

-----フォーム(Form1)-----
Dim Mo as New Class1

Sub bbb()
    Call Mo.aaa
End Sub

Sub ccc()
    Msgbox "成功"
End Sub


#Msgboxを表示させたいのですが どのように書いたらよいのか教えてください
お願いします。

投稿時間:2003/02/21(Fri) 11:12
投稿者名:回答1412
Eメール:
URL :
タイトル:
Re: クラスモジュール
'* フォームモジュール (Form1)
Option Explicit
Private Mo As New Class1
Private Sub Form_Load()
    Set Mo.wForm = Me
    Call Mo.aaa
End Sub
Public Sub ccc()
    MsgBox "成功"
End Sub

'* クラスモジュール (Class1)
Option Explicit
Public wForm As Form1
Public Sub aaa()
    Call wForm.ccc
End Sub

こんな感じ?
でも、普通こんなやり方はしないと思いますけど。

投稿時間:2003/02/21(Fri) 11:16
投稿者名:よねKEN
Eメール:
URL :http://www5b.biglobe.ne.jp/~yone-ken/
タイトル:
Re: クラスモジュール
> さっそく質問なんですが、クラスモジュールからフォームにcallしたいのですが

そういうときはイベントを使いましょう。Event、RaiseEvent、WithEventsキーワードを使います。
例えば、下記のような方法があります。

> -----クラスモジュール(Class1)------

Public Enum ResultStatus
   Success
   Failure
End Enum

Public Event Finish(ByVal status As ResultStatus)

Sub aaa()
    RaiseEvent Finish(Success)
End Sub

> -----フォーム(Form1)-----

Private WithEvents Mo As Class1

Sub bbb()
    Call Mo.aaa
End Sub

Private Sub Form_Load()
    Set Mo = New Class1
End Sub

Private Sub Mo_Finish(ByVal status As ResultStatus)
    Select Case status
    Case Success
        MsgBox "成功"
    Case Failure
        MsgBox "失敗"
    Case Else
        'ありえません。
    End Select
End Sub

投稿時間:2003/02/21(Fri) 14:41
投稿者名:mai
Eメール:
URL :
タイトル:
Re^2: クラスモジュール
> そういうときはイベントを使いましょう。Event、RaiseEvent、WithEventsキーワードを使います。
> 例えば、下記のような方法があります。
>
> > -----クラスモジュール(Class1)------
>
> Public Enum ResultStatus
>    Success
>    Failure
> End Enum
>
> Public Event Finish(ByVal status As ResultStatus)
>
> Sub aaa()
>     RaiseEvent Finish(Success)
> End Sub
>  
> > -----フォーム(Form1)-----
>
> Private WithEvents Mo As Class1
>
> Sub bbb()
>     Call Mo.aaa
> End Sub
>
> Private Sub Form_Load()
>     Set Mo = New Class1
> End Sub
>
> Private Sub Mo_Finish(ByVal status As ResultStatus)
>     Select Case status
>     Case Success
>         MsgBox "成功"
>     Case Failure
>         MsgBox "失敗"
>     Case Else
>         'ありえません。
>     End Select
> End Sub


回答ありがとうございました。

追加質問なんですが、フォームで Call文を書かずにクラスモジュールからCallするというのは
無理なんでしょうか?

投稿時間:2003/02/21(Fri) 14:50
投稿者名:nanashi
Eメール:
URL :
タイトル:
Re^3: クラスモジュール
> 回答ありがとうございました。
>
> 追加質問なんですが、フォームで Call文を書かずにクラスモジュールからCallするというのは
> 無理なんでしょうか?

ムリではないと思います(やったことありませんが…)

ただ、クラスモジュールは本来 プログラムを部品化し再利用可能にするために使います。
なので普通はクラスモジュール内から特定のフォームオブジェクトなどにアクセスするようには作りません。
クラスモジュールの処理はなるべくクラスモジュール内で完結するように作り、
プロパティ、メソッド(と戻り値)、イベントなどを通してデータの受け渡しをします。

投稿時間:2003/02/21(Fri) 14:41
投稿者名:nanashi
Eメール:
URL :
タイトル:
Re: クラスモジュール
クラスモジュールから直接フォームを操作しないで下さい。
そういうプログラムの組み方ではクラスモジュールを使う意味がありません。

ま、どうしてもやりたいなら止めませんが……。
Form1のcccプロシージャをPublic指定にして下さい。

投稿時間:2003/02/21(Fri) 15:22
投稿者名:mai
Eメール:
URL :
タイトル:
ありがとうございました
ソースをしっかり見てなかったみたいで
無茶な方法をしなくてもよかったみたいです(^^;)

ありがとうございました。m(__)m