現在、新規のフォームを別々に2本作成して、(A,Bとします)Aのコマンドボタンを押下した場合に、Bの画面へ遷移する画面の遷移コントロールを作成したのですが、Bの画面が遷移されてきて表示された時に、Aの画面にて使用したテキストボックスなどの値、フラグのパラメータなどを、Bの画面でも使用したいのですが、各標準モジュールに同じ名前の変数を定義しても、パラメータの値がはいりません。 画面の遷移後に共通で値をもった変数を使いたい場合はどうすればよいのでしょうか???
いろいろな方法がありますが、私がよく利用する手法は、
1.まず、FormBにPublicな関数を作る。
2.FormBを表示するときは、作ったPublic関数を呼び出すようにする。
3.Public関数で受け取った引数をFormの変数や、コントロールにセットしてFormを表示する。
です。
例)
Public sub ShowFormB(strParam as String)
Text1.Text = strParam
End Sub
すみません。途中で送信してしまいました。
例)
Public sub ShowFormB(strParam as String)
Text1.Text = strParam
Me.Show
End Sub
batchman様
ありがとうございます。 ためしにやってみたのですが、"strParam"を
フォームBのモジュール"Public strParam as String" で定義しまして、
Public sub ShowFormB(strParam as String)
Text1.Text = strParam
Me.Show
を入れて、動かしてみたのですが、何にもでないですー(T-T)
フォームAの変数に格納された値がフォームBで欲しいのですが、
フォームAの方には何もしなくてもいいのでしょうか?
Public Sub ShowFormB(strParam as String)
Text1.Text = strParam
Me.Show
End Sub
上記の関数は、FormBに記述します。
この関数では、FormAから呼び出されたときに引数の内容をテキストボックスにセットしてからフォームを表示しています。
ですので、FormBにText1というテキストボックスをつけておいてください。
変数に記憶するだけなら、Text1.Textのところを変数名に変えてください。
FormAでは、FormBを表示するときに、
Dim strBuff As String
strBuff = "Test文字列"
FormB.ShowFormB strBuff
で表示します。FormB.Showで表示すると何も起こりません。
batchman様 何度もすみません。ありがとうございます。
早速ためしてみた所、まず、BのフォームにText1を作りまして、
Aのフォームでコマンドボタンを押下した時に、ShellでBのEXEを
呼び出すソースの次の行にStrBuffの文をいれました所、実行すると
「FormB.ShowFormB」部分にオブジェクトが必要ですのエラーが出てしまいました。(涙)
●FormA●
Private Sub Command1.Click()
Dim aaa As Long
Dim strBuff As String
aaa = Shell("FormBのProjectEXEの場所", 1)
strBuff = "Test文字列"
FormB.ShowFormB strBuff
End Sub
●FormB●
Public Sub ShowFormB(strParam As String)
Text1.Text= strParam
Me.Show
End Sub
こんな感じなのですが、定義がおかしいのでしょうか?
プログラムがおかしいのでしょうか?
お分かりでしたらよろしくお願い致します。m(_ _)m
別Exeの場合は変数でデータを受け渡すことはできません。
AciveX Exeにするなり、
DDE通信するなり
SendMessageするなり
ファイルマッピングするなり
何らかのプロセス間通信をしてください。
同一Exe内のことだと思っておりましたよ。
Sayさんの言われるようにActiveX.EXE等で作成しないと、EXE間でのデータのやり取りは出来ません。
Say様 batchman様
ありがとうございます。 別EXEの場合あ変数でのデータの受け渡しは
できないのですね・・・。
APIのSendMessageでやってみようと調べてみたのですが、
APIは使ったことがないので、あまり意味がわかりません。
記載単語が多すぎて、どの項目を使用していいのかがわかりませんでした。
SendMassageだけで、API記載欄に定義文がたくさんあって、混乱状態です。
SendMessageの場合はどの項目を使用すればよいのでしょうか?
定義文の1行だけ使用するのでしょうか?
送り側でWM_COPYDATAをSendMessageしますが、
受け側をサブクラス化する必要があります。
送信データがテキストでいいなら、
受け側に受け用のTextBoxを用意し、
送り側でWM_SETTEXTをSendMessageしたほうが簡単です。
サブクラス化する必要ないし・・・。
「SendMessageを使用して個々のVBアプリ間のラベルの値の受け渡し」にも
書きましたが、DDE通信を使うほうが簡単です。(手法としては古いですが…。
VB 2.0 時代のテクニックですから…。)
Say様ありがとうございます。
調べまして、やってみます。
また分からないときはここに来るので、
その時はよろしくお願いいたします。
ツイート | ![]() |