人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

VB6 Form1からForm2に構造体(Type)型のデータを渡したいと考えています。
検索したところ、VBのClassをもちいれば
受け渡し可能なような記述が散見したのですが、
どのサンプルを用いれば良いか
いまひとつ解りませんでした。

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

●質問者: harunoharuno
●カテゴリ:コンピュータ
✍キーワード:Class VB vb6 ひとつ クラス
○ 状態 :終了
└ 回答数 : 6/6件

▽最新の回答へ

1 ● きゃづみぃ
●19ポイント

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

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

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

◎質問者からの返答

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

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

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

「コンパイルエラー

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

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

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

きます。」

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

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

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

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


2 ● degucho
●250ポイント ベストアンサー

構造体の場合

標準モジュール(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

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

◎質問者からの返答

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

「コンパイルエラー

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

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

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

きます。」

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

型は

Public Type A

str As String

End Type

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


3 ● HALSPECIAL
●250ポイント

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

◎質問者からの返答

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


4 ● きゃづみぃ
●50ポイント

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


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

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

◎質問者からの返答

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

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

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

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

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


5 ● degucho
●0ポイント

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

受け取り側のSubを

Friend Sub

として宣言してください

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

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

◎質問者からの返答

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

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

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

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


1-5件表示/6件
4.前の5件|次5件6.
関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ