今、VB6.0を使ってます。
オブジェクト1でオブジェクト2を呼び出し、
オブジェクト2のTextbox1〜3に値を入力し、
Command1ボタンを押すと、strtime変数に値を設定し、
オブジェクト2にあるstrtimeを、オブジェクト1のtime変数に
代入したいのですがうまくできません。
下記のようにすると、オブジェクト2が表示できないので困っています。
strtimeは外部変数で定義しているので、オブジェクト2で
strtimeに値を設定すれば、オブジェクト1でも反映されると思うのですが。
------------------------------------------------------
【外部変数】
Public strtime As String
【オブジェクト1】
Private Sub Command1_Click()
Dim time As String
Object2.show ←ここでオブジェクト2の処理をする。
time = strtime
End Sub
【オブジェクト2】
Private Sub Command1_Click()
strtime = Text1.Text & " '" & Text2.Text & "’" & Text3.Text
End Sub
-----------------------------------------------------
初心者的な質問で申し訳ありませんがよろしくお願いします。
モードレスウィンドウで表示しているので
Object2.show
を行った後、すぐに
time = strtime
の処理が行われます。
Object2の画面を閉じるのをまってtime = strtimeの処理を行いたいのであれば
Object2をモーダル表示する必要があります。
Show でフォームをモードレスとして表示させていますから、Object2.Show の次の time=strtime はフォーム表示されたら直ちに実行されます。
対策としては、
案1:strtimeの値を見に行くタイミングを直す
案2:オブジェクト2の表示中にオブジェクト1が操作不能でも良いのなら、オブジェクト2をモーダルで表示する
とかでしょう。
# MSDN LibraryのShowメソッドの説明をきちんと読み直すことをお勧めします。
質問に対する回答は、上記のお二人のもので問題ないと思います。
私のはただの蛇足ですが…
オブジェクト間での値のやり取りは、パブリック変数で受け渡しをするよりも、
プロパティとして渡した方がよいと言われています。
パブリック変数は、どこからでも参照できる便利な変数なのですが、
しかしその代わりに、どこで値の変更が行われているか発見しづらいという特徴を持っています。
一方プロパティで受け渡しをすると、別オブジェクトからの書きこみの可否や、
変数のスコープ等を明確に指定できるため、自分が意図しない部分で値が変わる、
といった状況を未然に防ぐことが可能になります。
多少難しいと思いますが、その辺を知りたいと思われるのであれば
propertyステートメントについて調べてみると良いですよ(^^
無事解決しました。
ABCさん、ひろさん、にょもさん
ありがとうございます。
ツイート | ![]() |