VB6 Form1からForm2に構造体(Type)型のデータを渡したいと考えています。

検索したところ、VBのClassをもちいれば
受け渡し可能なような記述が散見したのですが、
どのサンプルを用いれば良いか
いまひとつ解りませんでした。

Classを用いてできるのであれば、
・クラスの宣言方法。
・プロパティの定義方法
などを教えていただきたく宜しくお願いします。

回答の条件
  • URL必須
  • 1人2回まで
  • 13歳以上
  • 登録:2010/03/15 17:06:35
  • 終了:2010/03/18 00:36:41

ベストアンサー

id:degucho No.2

degucho回答回数253ベストアンサー獲得回数672010/03/15 17:26:13

ポイント250pt

構造体の場合

標準モジュール(bas)に

Public Type XXX


で定義してForm2に


Public Sub setData(ByVal p As XXX)


というサブを定義して

Form1側で


Form2.Show

Form2.setData(渡したい変数)


とすれば渡せるはずです

クラスを使う場合、クラスモジュールを作成して(常にPublicです)

http://homepage1.nifty.com/CavalierLab/lab/vb/clsmdl/classmodule...

中にPublic変数やProperty Set/Let/Getプロシージャを作成してください

http://homepage1.nifty.com/rucio/main/shokyu/jugyou28.htm

渡し方は構造体と同じです

id:harunoharuno

構造体を渡そうとすると下記のエラーが出ます。

「コンパイルエラー

 パブリックオブジェクトモジュールで定義されたパブリックユーザ定義

 型に限り、クラスモジュール内のパブリックプロシージャの引数または

 戻り値、またはパブリックユーザ定義型の要素として使用することがで

 きます。」

定義位置に問題があるのかな?構造体の定義は標準モジュールです。

型は

Public Type A

  str As String

End Type

のように定義しています。

2010/03/15 17:35:39

その他の回答(5件)

id:taknt No.1

きゃづみぃ回答回数13539ベストアンサー獲得回数11982010/03/15 17:21:30

ポイント19pt

http://homepage1.nifty.com/rucio/main/dotnet/Samples/Sample044De...

http://hp.vector.co.jp/authors/VA017795/vbuseful/user.htm

VB6では Classは使えませんので、ユーザー定義型を Public で宣言して使うことになります。

id:harunoharuno

クラスモジュールというのがあるのでVB6にも存在する?

と思っていましたが存在しないんですね。残念です。

Form1からForm2にType型のデータを渡す際に

「コンパイルエラー

 パブリックオブジェクトモジュールで定義されたパブリックユーザ定義

 型に限り、クラスモジュール内のパブリックプロシージャの引数または

 戻り値、またはパブリックユーザ定義型の要素として使用することがで

 きます。」

という警告が表示されてしまいます。これを回避するために

クラスを検討したのですが、、、、

Public 定義にしても警告が発生します。

こちらについての対応方法も教えていただけるとありがたいです。

2010/03/15 17:33:49
id:degucho No.2

degucho回答回数253ベストアンサー獲得回数672010/03/15 17:26:13ここでベストアンサー

ポイント250pt

構造体の場合

標準モジュール(bas)に

Public Type XXX


で定義してForm2に


Public Sub setData(ByVal p As XXX)


というサブを定義して

Form1側で


Form2.Show

Form2.setData(渡したい変数)


とすれば渡せるはずです

クラスを使う場合、クラスモジュールを作成して(常にPublicです)

http://homepage1.nifty.com/CavalierLab/lab/vb/clsmdl/classmodule...

中にPublic変数やProperty Set/Let/Getプロシージャを作成してください

http://homepage1.nifty.com/rucio/main/shokyu/jugyou28.htm

渡し方は構造体と同じです

id:harunoharuno

構造体を渡そうとすると下記のエラーが出ます。

「コンパイルエラー

 パブリックオブジェクトモジュールで定義されたパブリックユーザ定義

 型に限り、クラスモジュール内のパブリックプロシージャの引数または

 戻り値、またはパブリックユーザ定義型の要素として使用することがで

 きます。」

定義位置に問題があるのかな?構造体の定義は標準モジュールです。

型は

Public Type A

  str As String

End Type

のように定義しています。

2010/03/15 17:35:39
id:HALSPECIAL No.3

HALSPECIAL回答回数407ベストアンサー獲得回数862010/03/15 17:41:25

ポイント250pt

VB6はクラスは使えます。

クラスモジュールというのがありますから。

VB6の記述は、こんな感じで記述します。


クラスモジュール

Class1 と言う名前でクラスモジュールに記述

Option Explicit

'クラスのメンバ変数の定義
Private m_Text1 As String
Private m_Integer1 As Integer


'Text1プロパティ
Public Property Get Text1() As String
    Text1 = m_Text1
End Property

Public Property Let Text1(ByVal value As String)
    m_Text1 = value
End Property


'Integer1プロパティ
Public Property Get Integer1() As Integer
    Integer1 = m_Integer1
End Property

Public Property Let Integer1(ByVal value As Integer) 'オブジェクトでない場合Letとなる
    m_Integer1 = value
End Property

Form1

Option Explicit

Private Sub Form_Load()

    Dim cls As New Class1
    cls.Text1 = "xxx"
    cls.Integer1 = 999

    Form2.Show
    Set Form2.MyClass1 = cls

End Sub

Form2

※ボタンを1つ作成してください。

Option Explicit

'クラスのメンバ変数の定義
Private m_MyClass As Class1

Public Property Set MyClass1(ByVal value As Class1) 'オブジェクトの場合Setとなる
   Set m_MyClass = value
End Property

Private Sub Command1_Click()
    MsgBox m_MyClass.Text1
    MsgBox m_MyClass.Integer1
End Sub

id:harunoharuno

サンプルまで作っていただきありがとうございました。VB6でもクラスを用いることが出来ることを実感することが出来ました。

2010/03/17 14:34:45
id:taknt No.4

きゃづみぃ回答回数13539ベストアンサー獲得回数11982010/03/15 17:49:38

ポイント50pt

http://www.int21.co.jp/pcdn/vb/noriolib/vbmag/9812/vb6/


ただし,少々トリッキーだが,外部のモジュールでPublicに定義されたユーザー定義型のクラスを使うことはできる.

外部のモジュールでPublicの定義をしないとダメなようです。

id:harunoharuno

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

全てのモジュールから参照可能な外部モジュールを用いるのはあまり行いたくないような気がします。

参考になる頁をご紹介いただきありがとうございました。

>>すべてのプロジェクトのすべてのモジュールのどのプロシージャからも参照できるユーザー定義型を

>>宣言するときのみ,Publicキーワードを指定することができる.

2010/03/16 11:10:58
id:degucho No.5

degucho回答回数253ベストアンサー獲得回数672010/03/15 18:08:49

記憶で書いたら大事なことを忘れていました

受け取り側のSubを

Friend Sub

として宣言してください

http://a-tak.com/xoops/modules/wordpress/2003/07/21/7

こちらはポイント不要です

id:harunoharuno

他の回答もたくさんでていますが、、、、

容易な対応方法なのでdegucho様の回答から確認中です。

(とりあえず、エラーでなくなりました。)

[追記]Friend をつけて宣言することでデータ受け渡しできるようになりました。どうもありがとうございます。

2010/03/16 11:05:56
id:ko8820 No.6

ko8820回答回数1221ベストアンサー獲得回数692010/03/15 18:53:29

ポイント50pt

http://www.geocities.co.jp/SiliconValley-Bay/9960/vb/vbclass.htm...

こんな感じですけど・・・。

id:harunoharuno

参考になります。回答ありがとうございました。

2010/03/17 14:36:47

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません