• 締切済み

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が違うのでとても困ってます><

みんなの回答

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.5

どこでエラーになるのかはエラーがでているであろう箇所にブレークポイントを設定して 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)
回答No.4

> 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) といった具合の場合に先の投稿の最後の項目が該当します

harP0101
質問者

お礼

即返信ありがとうございます!なのに返信が遅れてしまい申し訳ありません。 確かにボタン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)でも同じ結果が表示されました。どうしてなのでしょうか。 申し訳ありませんがよろしくお願いします。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

私もこんなに大切なことが判らない。解説も明快なのを見たことがない。 既回答で、質問者の意図に答えていますか?。 私は、次に実行される異なるモジュールにデータ(変数)を渡すのは (1)引数 (2)PUBLIC変数 (3)自分の上位にある記憶域(クリップボードのような仕組み?) (4)外部記憶装置(ディスク)の所定のファイルに書き、必要なとき読む (5)その他(何があるだろう)    エクセルVBAなら、シートのセルに書き込むなど。 (3)(4)(5)とも排他的利用を保証されないとならない。 他人に変えられると困る。 イベントの引数は自由に引数を作れない?。 (2)しかないのではないか。

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.2

フォルダーの変更と ボタンの関係は ボタン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 ) といった具合にします

harP0101
質問者

お礼

回答ありがとうございます。 無事にForm2に画像を表示できるようになったのですが、 Form2にDim宣言し、ロードイベントをした後クリックイベントの先頭で chdir sFolder( Index ) にすると書いて頂きましたが、これを書かなくても表示出来ました。 これはどうしてなのでしょうか?

  • NYOI
  • ベストアンサー率58% (56/96)
回答No.1

画像を表示させてるのは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 これでどうですか?

harP0101
質問者

お礼

回答ありがとうございます。 Form2に画像が表示されました。

関連するQ&A

  • 画像の名前を指定しないで全てを表示したい

    開発環境はVB6.0です。 このサイトで面白そうなのを見つけたのでやってみた所、写真の名前を指定しないと表示できない事に気づきました。 Private Sub Command1_Click() ChDir "c:\image" For n = 0 To 2 fn = Chr(48 + n) & ".jpg" Form2.Image1(n).Picture = LoadPicture(fn) Next Form2.Show ChDir App.Path End Sub 以上の方法ですと、Form1にあるボタンを押すとForm2にあるImage1にc\image内にある".jpg"の画像(この場合は写真)が表示される。 まではわかったのですが、For~Next文を使用しているので1.jpgや2.jpgなど名前を特定した場合でないと表示できない事に気づきました。 前説が長くて申し訳ありませんが、問題点は ●"IMGP0271.jpg"のような場合はどうすればよいのか。 ●写真の枚数を指定しないでフォルダ内にある".jpg"であれば全て表示させるようにするにはどうすればよいのか。 よろしくお願いします。

  • VB6のform Load

    Private Sub Form_Load() Form1.ScaleMode = 0 Form1.Scale (-10, 10)-(10, -10) Form1.Line (-10, 0)-(10, 0) Form1.Line (0, -10)-(0, 10) End Sub とやって座標画面を作ろうとしましたが Lineが表示されません。 仕方が無いので Private Sub Form_Load() Form1.ScaleMode = 0 Form1.Scale (-10, 10)-(10, -10) End Sub Private Sub Form_Activate() Form1.Line (-10, 0)-(10, 0) Form1.Line (0, -10)-(0, 10) End Sub とやりました。 そういうものだとあきらめるしかないのでしょうか?

  • Form1に記述されたスクリプトをForm2のボタンクリックで実行させたい

    おせわになります VBのVer.6使用しています Form1には仮に以下のような計算をする内容があるとします Private Sub testA() Text1.text = 10 Text2.text = 20 End Sub これをForm2のボタンをクリックすると実行するようにするにはどうしたらよいでしょうか? 上のPrivateをPublicにしても駄目でした 標準モジュールではオブジェクトがないのでエラーとなりました よろしくお願いします

  • VBAでフォームに画像を表示したい

    ExcelVBAでフォームに画像を表示したいのですが Private Sub CommandButton1_Click() Image2.Picture = LoadPicture("A3") End Sub セルA3に"C:\デスクトップ\A\A\a-1\A-01.jpg"が入力されています。 ファイルがありません。とエラーがでます。 下記ではうまく表示されます。 Image2.Picture = LoadPicture("C:\デスクトップ\A\A\a-1\A-01.jpg") 何がよくないのでしょうか? よろしくお願い致します。

  • form2がボタンを押すと消えてしまう

    vb2010で、作成しています。form1から、form2を呼び出し、okボタンまたは、cancelボタンを押すと、無条件でform2が消えてしまいます。私がしたいのは、form2(パスワード入力ウィンドウ)でテキストボックスにパスワードを入力してokボタンを押して、それが正しい(1234)ときのみform2を消去することです。現在のところ、入力したパスワードが間違っていてもokボタンを押すと、form2は消えてしまいます。 form1側のコードとform2側のコードは以下です。お手数ですが御教示いただけると幸いです。 /////////Form1 Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim f As New Form2() f.TextBox1.PasswordChar = "*"c '//入力文字をマスクする If f.ShowDialog(Me) = DialogResult.OK Then If f.TextBox1.Text = "1234" Then f.Dispose() End If End If End Sub End Class /////////Form2 Public Class Form2 Private Sub btnOK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOK.Click Dim f As Form1 f = Me.Owner Me.DialogResult = DialogResult.OK End Sub Private Sub btncancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btncancel.Click Dim f As Form1 f = Me.Owner Me.DialogResult = DialogResult.Cancel End Sub End Class

  • ファンクションキーで命令を実行させたい

    よろしくお願いします。 ACCESS2000を使用しています。 ファンクションキーで命令を実行したく、下記のコマンドを書いて実行しましたが動作しません。 Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) Me.メインsub.Form.SetFocus Select Case KeyCode Case vbKeyF5 Me.btn帰社.SetFocus Call btn帰社_Click Case Else KeyCode = 0 End Select End Sub Private Sub Form_Load() Me.KeyPreview = True End Sub フォームプロパティのキーボードイベント取得は「はい」で設定してあります。 2週間位、いろいろやってみましたがうまくいきません。はまっています。回答・ヒントをよろしくお願いします。

  • FORM1からFORM2にパラメータの引渡し

    Public class Form1 Private Sub Button1_Click(------------------) Dim textBox1 As String textBox1 = TextBox1.Text End Sub End Class Form1でボタンをクリックし、textBox1の値を モードレスで開いたForm2にtextBox1の値を渡したい と考えていますが、参考となるサイトがなく どのように書いたらいいのかわかりません…。 メソッド(textBox1) 'FORM1側 Public Sub メソッド(ByVal textBox1 As String) ' FORM2側 で出来ると思ったのですが、この場合モードレスで開いたとしても パラメータが渡せない?と思い…。 ヒントでもいいので、アドバイスをよろしくお願いします。

  • Formオブジェクトについて

    Formオブジェクトに関する質問です。 ある関数にフォームオブジェクトを引数として渡してやりたいのですが、何かよい方法はありますでしょうか? 例) Private Sub cmdTest_Click(Index as Integer) Dim frm as Form If Index = 0 then Load_Test(Form 2) Else Load_Test(Form 3) End if End Sub Private Sub Load_Test(frm as Form) frm.Show frm.Label1.Caption = "TEST” End Sub

  • Form間のデータ渡しについて

    申し訳ありません。VB.NET初心者です。 Form1から、ボタンAをクリックするとForm2がオープンします。 Form1から、ボタンBをクリックするとForm3がオープンします。 Form1では、Form2またはForm3で設定した値をそれぞれ演算に使おうとしています。 MicrosoftのHPからパクってForm1 - Form2間のデータの引渡しを行うことはできたの ですが、新規でForm3を作成して、Form1 - Form3間のデータの引渡しを行おうとする とForm3の立ち上がり時に "NullReferenceException はハンドルされませんでした"となり、 困ってしまいました。 使われている方から見ると簡単かもしれず 申し訳ありませんが、どなたか教えていただけないでしょうか。 ==================== Form1.vb ======================= Form1には、Label1、Label2、Button1、Button2があります。 Public Class Form1 Inherits System.Windows.Forms.Form Private m_form2 As Form2 Private m_form3 As Form3 Public Property LabelText() As String Get Return Label1.Text End Get Set(ByVal Value As String) Label1.Text = Value End Set End Property Public Property LabelText2() As String Get Return Label2.Text End Get Set(ByVal Value As String) Label2.Text = Value End Set End Property Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ScaleYokusou.Click m_form2 = New Form2(Me) m_form2.ShowDialog() m_form2.Dispose() End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ScaleHikito.Click m_form3 = New Form3() m_form3.ShowDialog() m_form3.Dispose() End Sub End Class ==================== Form2.vb ======================= Form2には、TextBox1、Button1があります。 Public Class Form2 Inherits System.Windows.Forms.Form Private m_form1 As Form1 Private Sub TextBox1_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged If m_form1 Is Nothing = False Then m_form1.LabelText = Me.TextBox1.Text End If End Sub Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load If m_form1 Is Nothing = False Then Me.TextBox1.Text = m_form1.LabelText End If End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Me.Close() End Sub End Class ==================== Form3.vb ======================= Form3には、TextBox1、Button1があります。 Public Class Form3 Inherits System.Windows.Forms.Form Private m_form1 As Form1 Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged If m_form1 Is Nothing = False Then m_form1.LabelText2 = Me.TextBox1.Text End If End Sub Private Sub Form3_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Me.TextBox1.Text = m_form1.LabelText2 End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Me.Close() End Sub End Class

  • vb6.0のFormの遷移がうまくいきません。

    Form1からForm2に移動するときのプログラム Private Sub Command5_Click() Form2.Show With Form1 .Enabled = False .Visible = False End With End Sub です。 Form2からForm1に移動するときのプログラム Private Sub Command1_Click() Form1.Show With Form2 .Enabled = False .Visible = False End With End Sub Form1からForm2に移動し、Form2からForm1に移動する 事は出来たのですが。もう一度、Form1からForm2に 移動しようとするとBeep音が鳴り移動できません。 なぜ、2回目は失敗するのでしょうか? プログラムに問題はありますか?

専門家に質問してみよう