1

私は VB6 アプリケーションに取り組んでおり、タイプを参照として送信し、別のフォームに保存したいと考えています。これは可能ですか?

送信は問題ありません。ByRefキーワードを使用するだけです。

public Sub SetStopToEdit(ByRef currentStop As StopType)

しかし、 Set を使用currentStopして受信モジュールに保存しようとすると、プログラムの実行時に「オブジェクトが必要です」というエラーが表示されます。

Private stopToEdit As StopTypeModule.StopType
' ... Lots of code
Set stopToEdit = currentStop

StopTypeモジュール (クラス モジュールではありません)で次のように定義されます。

Public Type StopType
    MachineName As String
    StartDate As Date
    StartTime As String
    Duration As Double
End Type

送信された参照を保存することは可能StopTypeですか、それともクラスにする必要がありますか?

ローカル変数を設定するだけで機能しますが:

stopToEdit = currentStop

stopToEditが後で変更された場合、その変更は に送信される変数には表示されませんSetStopToEdit

4

3 に答える 3

2

クラスにリファクタリングする必要があります。

于 2008-09-24T12:22:00.940 に答える
1

ストップタイプとは?それはどのように定義されていますか?Type は VB6-Record のものですか? そうである場合 (そして可能であれば)、それをクラスとして再定義する必要があります。そうしないと、コレクションで問題が発生するため、それらのみを使用してください。

キーワード - 文字列、整数、および数値を削除してみてくださいSet。ただし、正しく覚えていれば、レコードもSetではなく、 Letですが、割り当てには暗黙的に含まれています。

stopToEdit = currentStop

EDIT : 渡された (ByRef) レコードを変更する場合は、要素全体を再割り当てするのではなく、要素コピーの手動要素を実行します。これでうまくいくはずです。

同時に:しないでください!ByRef (残念ながら VB のデフォルト) はあまりクールではありません (私の息子の言葉を借りれば)。渡された引数を変更しないように関数を設計してみてください-これが戻り値です...

于 2008-09-24T12:12:29.247 に答える
0

ここでの混乱は、StopType がオブジェクトのような参照ではなく、LONG などの組み込み型のように動作することです。あなたがするとき:

stopToEdit = currentStop

currentStop のコピーのみを取得しています。その後、stopToEdit を変更する場合は、コピーして戻す必要があります。

currentStop = stopToEdit

そうすれば、値は Sub から戻されます。

于 2008-09-29T12:03:32.227 に答える