- 締切済み
Form1で指定した命令をForm2で実行させたい。
開発環境はVB6.0です。 Form1にA・B・Cの3つのボタンを用意します。 格ボタンを押した時各自が用意した画像ファイルをForm2に表示させます。 という事をしたいんですが、 Form1にAのボタンと画像を表示するなら Private Sub Form_Load() ChDir "c:\gazou\a" End Sub Private Sub Command1_Click() For i = 0 To 2 fn = Chr(48 + i) & ".jpg" Image1(i).Picture = LoadPicture(fn) Next i End Sub 表示されるのですが、『"C:\gazou\a"』の部分が"C:\gazou\b"や"C:\gazou\c"にしないといけないので困っています。 しかもFormが違うのでとても困ってます><
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- redfox63
- ベストアンサー率71% (1325/1856)
どこでエラーになるのかはエラーがでているであろう箇所にブレークポイントを設定して F8キーによるステップ実行で確認してみましょう 実行しようとするとsFolderが選択されてエラーになっていると思います 変数として宣言されていないので FunctionかSubプロシージャだと VBが勘違いしているわけです ボタンをコントロール配列にするならsFolderはFor1側で宣言するようにしないと意味がありません このように 宣言していない変数を許容してしまいます これを防ぐにはVBのメニューで ツール > オプション > 変数タブの『変数の宣言を強制する』にチェックを入れておきます そうすると 新規に作成するファイル(フォーム、class、標準モジュールなど)の先頭に Option Explicit といった命令が追加されます 下記は単純な例ですが dim n as integer for i=0 to 100 next といったコードは 実行時点でチェックされコンパイルエラーになります ... 変数が宣言されていませんといったメッセージを表示 iが選択された状態になると思います 宣言されていない変数iを使おうとしていますから nの間違いだなと気がつきます 変数宣言を全てしないといけなくなりますから面倒にはなりますが バグの予防といった面では有効な手段ですよ # 今後他の言語(C,C#,Java等)を手がけることがあるなら変数宣言は # 必ず事前に行うといったことが身についていると役に立つでしょう
- redfox63
- ベストアンサー率71% (1325/1856)
> Form2にDim宣言し、ロードイベントをした後クリックイベントの先頭で > chdir sFolder( Index ) > にすると書いて頂きましたが、これを書かなくても表示出来ました。 クリックイベントをどのように組み立てましたか? Command1、Command2、Command3といった具合にボタンオブジェクトが個別になっていてクリックイベントの先頭で chdir "c:\gazou\a" または chdir "c:\gazou\b" または chdir "c:\gazou\c" を実行しているのはありませんか? ボタンがピクチャーボックスのようにコントロール配列になっていて Private Sub Command1_click(index As integer) といった具合の場合に先の投稿の最後の項目が該当します
- imogasi
- ベストアンサー率27% (4737/17070)
私もこんなに大切なことが判らない。解説も明快なのを見たことがない。 既回答で、質問者の意図に答えていますか?。 私は、次に実行される異なるモジュールにデータ(変数)を渡すのは (1)引数 (2)PUBLIC変数 (3)自分の上位にある記憶域(クリップボードのような仕組み?) (4)外部記憶装置(ディスク)の所定のファイルに書き、必要なとき読む (5)その他(何があるだろう) エクセルVBAなら、シートのセルに書き込むなど。 (3)(4)(5)とも排他的利用を保証されないとならない。 他人に変えられると困る。 イベントの引数は自由に引数を作れない?。 (2)しかないのではないか。
- redfox63
- ベストアンサー率71% (1325/1856)
フォルダーの変更と ボタンの関係は ボタンA ... C:\gazou\a ボタンB ... C:\gazou\b ボタンC ... C:\gazou\c でいいのですか? Form2を表示したいのなら Form2.Show で可能ですよ Form2上にあるImageコントロールをForm1から操作するなら Form2.Image1(n).Picture といった具合にすれば可能です ChdirやChDriveなどを使ってコマンドボタンのクリックイベントでフォルダーを変更しましょう ボタンのクリックイベント chdir "C:\gazou\a" for n=0 to 2 fn=chr(48+n) & ".jpg" Form2.image1(n).picture = loadpicture( fn ) next Form2.show chdir app.Path といった具合で ... ボタンをコントロール配列にしておけばイベントプロシージャは1個ですみます formに dim sFolder(2) と宣言しておき Loadイベントで sFolder(0) = "C:\gazou\a" sFolder(1) = "C:\gazou\b" sFolder(2) = "C:\gazou\c" といった具合に初期化します クリックイベントの先頭で chdir sFolder( Index ) といった具合にします
お礼
回答ありがとうございます。 無事にForm2に画像を表示できるようになったのですが、 Form2にDim宣言し、ロードイベントをした後クリックイベントの先頭で chdir sFolder( Index ) にすると書いて頂きましたが、これを書かなくても表示出来ました。 これはどうしてなのでしょうか?
- NYOI
- ベストアンサー率58% (56/96)
画像を表示させてるのはImageなのかPictureBoxなのか解かりませんが、form2にも現在のform1と同じように、Image or PictureBoxを用意した上で、 Private Sub Command1_Click() For i = 0 To 2 fn = Chr(48 + i) & ".jpg" form2.Image1(i).Picture = LoadPicture(fn) Next i 'form2が開かれてなければ以下も form2.show End Sub これでどうですか?
お礼
回答ありがとうございます。 Form2に画像が表示されました。
お礼
即返信ありがとうございます!なのに返信が遅れてしまい申し訳ありません。 確かにボタン1つ1つにChDir"c:\gazou\a"やChDir"c:\gazou\b"と記入していました。 Form1にコントロール配列したボタンを配置し、 Private Sub Command1_Click(index As Integer) chdir sFolder( Index ) for n=0 to 2 fn=chr(48+n) & ".jpg" Form2.image1(n).picture = loadpicture( fn ) next Form2.show chdir app.Path End Sub と記入し、Form2のformに dim sFolder(2) sFolder(0) = "C:\gazou\a" sFolder(1) = "C:\gazou\b" sFolder(2) = "C:\gazou\c" と記入しましたが、SubまたはFunctionが定義されていません。と表示されてしまいました。 ボタンをコントロール配列しているのでchdir sFolder( Index )は変更できないと思うし、コントロール配列をしなくてchdir sFolder(0)でも同じ結果が表示されました。どうしてなのでしょうか。 申し訳ありませんがよろしくお願いします。