画面遷移をした時の値の取得はどうすれば?

解決


みお  2002-11-20 19:41:29  No: 76418

現在、新規のフォームを別々に2本作成して、(A,Bとします)Aのコマンドボタンを押下した場合に、Bの画面へ遷移する画面の遷移コントロールを作成したのですが、Bの画面が遷移されてきて表示された時に、Aの画面にて使用したテキストボックスなどの値、フラグのパラメータなどを、Bの画面でも使用したいのですが、各標準モジュールに同じ名前の変数を定義しても、パラメータの値がはいりません。  画面の遷移後に共通で値をもった変数を使いたい場合はどうすればよいのでしょうか???


batchman  2002-11-20 20:18:34  No: 76419

いろいろな方法がありますが、私がよく利用する手法は、
1.まず、FormBにPublicな関数を作る。
2.FormBを表示するときは、作ったPublic関数を呼び出すようにする。
3.Public関数で受け取った引数をFormの変数や、コントロールにセットしてFormを表示する。

です。

例)

Public sub ShowFormB(strParam as String)

     Text1.Text = strParam

End Sub


batchman  2002-11-20 20:20:02  No: 76420

すみません。途中で送信してしまいました。

例)

Public sub ShowFormB(strParam as String)

     Text1.Text = strParam
     Me.Show 

End Sub


みお  2002-11-20 20:42:13  No: 76421

batchman様
ありがとうございます。 ためしにやってみたのですが、"strParam"を
フォームBのモジュール"Public strParam  as String" で定義しまして、
Public sub ShowFormB(strParam as String)
     Text1.Text = strParam
     Me.Show 
を入れて、動かしてみたのですが、何にもでないですー(T-T)
フォームAの変数に格納された値がフォームBで欲しいのですが、
フォームAの方には何もしなくてもいいのでしょうか?


batchman  2002-11-21 00:31:11  No: 76422

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で表示すると何も起こりません。


みお  2002-11-21 01:18:30  No: 76423

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


Say  2002-11-21 02:36:42  No: 76424

別Exeの場合は変数でデータを受け渡すことはできません。
AciveX Exeにするなり、
DDE通信するなり
SendMessageするなり
ファイルマッピングするなり
何らかのプロセス間通信をしてください。


batchman  2002-11-21 03:32:08  No: 76425

同一Exe内のことだと思っておりましたよ。

Sayさんの言われるようにActiveX.EXE等で作成しないと、EXE間でのデータのやり取りは出来ません。


みお  2002-11-21 19:01:35  No: 76426

Say様  batchman様
ありがとうございます。  別EXEの場合あ変数でのデータの受け渡しは
できないのですね・・・。  
APIのSendMessageでやってみようと調べてみたのですが、
APIは使ったことがないので、あまり意味がわかりません。
記載単語が多すぎて、どの項目を使用していいのかがわかりませんでした。
SendMassageだけで、API記載欄に定義文がたくさんあって、混乱状態です。
SendMessageの場合はどの項目を使用すればよいのでしょうか?
定義文の1行だけ使用するのでしょうか?


Say  2002-11-22 07:14:30  No: 76427

送り側でWM_COPYDATAをSendMessageしますが、
受け側をサブクラス化する必要があります。

送信データがテキストでいいなら、
受け側に受け用のTextBoxを用意し、
送り側でWM_SETTEXTをSendMessageしたほうが簡単です。
サブクラス化する必要ないし・・・。

「SendMessageを使用して個々のVBアプリ間のラベルの値の受け渡し」にも
書きましたが、DDE通信を使うほうが簡単です。(手法としては古いですが…。
VB 2.0 時代のテクニックですから…。)


みお  2002-11-22 18:41:27  No: 76428

Say様ありがとうございます。
調べまして、やってみます。
また分からないときはここに来るので、
その時はよろしくお願いいたします。


※返信する前に利用規約をご確認ください。








  このエントリーをはてなブックマークに追加