• ベストアンサー

formをもう一度Loadする方法

form1をLoadした後 別のページに移動後またform1に戻ってきた場合 もう一度ロードするにはどうしたらいいでしょうか? 例えば、画面1で画像をクリックして消すとします。 そのページから画面2に行きまた画面1に戻った時に、ここでまたフォームをロードをして画像が消える前にしたいのです。 ロードで宣言はしているのですがうまくいきません。 調べたのですが調べ方が悪いのかまったく答えが見つかりませんでした。 お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

こんにちは >まったく答えが見つかりませんでした。 ご苦労さまでした。 >画像をクリックして消すとします PictureBoxをクリックでいいですか? >別のページに移動後またform1に戻ってきた場合もう一度ロードするにはどうしたらいいでしょうか? VBはオブジェクト指向ですのでクラスを実体化して使用するというスタイルになります。 基本的にはform1もForm2も「Class Form1」「Class Form2」と書かれている通りクラスの扱いをします。 クラスの扱いですからForm2を実体化する場合は Dim f2 As New Form2→Newします。 また、 Form1に戻る時も Dim f1 As New Form1→Newします。 但し、使い終わったForm1があってもアクセスできませんので Form2を開く前にForm1を消去します。 簡単な方法がフォームの「疎遠結合」という方法を使います。 #シャットダウンモードの設定をします。 この部分は図解でここに記載してあります。(ページの中程) http://kagoturich.kakukaku-sikajika.com/ 「最後のフォームが閉じるとき」 に設定してください。 サンプルです。Form1にButtonとPictureBoxが貼り付けてあります。 Form2にButtonが貼り付けてあります。 Class Form1側 Public Class Form1 'Form1_Loadイベントハンドラー Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Shown Button1.Text = "Form2へ" 'PictureBox1に画像の表示 PictureBox1.Image = Image.FromFile("C:\test.jpg") 'ここは任意のパス End Sub 'Button1_Clickイベントハンドラー Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 'Form2のインスタンス Dim f2 As New Form2 f2.Show() Me.Close() End Sub 'PictureBox1_Clickイベントハンドラー Private Sub PictureBox1_Click(sender As Object, e As EventArgs) Handles PictureBox1.Click 'PictureBox1の画像を消去 PictureBox1.Image = Nothing End Sub End Class Class Form2側 Public Class Form2 Private Sub f() Handles MyBase.Shown Button1.Text = "Form1へ" End Sub 'Button1_Clickイベントハンドラー Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 'Form1のインスタンス Dim f1 As New Form1 f1.Show() Me.Close() End Sub End Class 上記のコードをコピペして実験してみてください。 また、Hideを使うと終了ができなくなってしまうこともありますので、注意が必要です。 

mimiru7
質問者

お礼

ありがとうございます。 無事ロードができるようになりました。 分かりやすく説明してくださってありがとうございました。

その他の回答 (1)

回答No.1

Windowアプリなら、 form2を表示するときに、form1をClose()しないでHide()にしておく。 form1に戻すときには、Form1をShow()する。

mimiru7
質問者

お礼

回答ありがとうございました。 このような感じでやってみたのですがうまくいきませんでした。 すみません。 form1  form2.Show()  Me.Hide() form2  form1.Show()  Me.Hide()

関連するQ&A

  • Form_LoadでDB接続ではなく、Form_Load完了でDB接続したい

    VB.NETです。 現在、Form_LoadにDB接続のコードを記述していますが、Form_Load完了後に、DB接続の命令を実行することはできますでしょうか? つまり、Form_Loadが完了したら、DB接続のコードが実行されるようにしたいのです。 理由は、DB接続に時間がかかる場合、Form_Loadによる画面がなかなか出てこない。 また、DB接続エラーとなった場合、Form_Loadによる画面が出る前に、エラーメッセージがポップアップされてしまう。 これらを回避したいのです。 良い方法ご存知の方がいましたら、ご教授下さいませ。 よろしくお願い致します。

  • Form1にForm2を作る

    c++BuilderXE2です。 Vclフォームアプリケーションで作ったForm1に、更にForm2を作ることはできるのでしょうか。 プロジェクトマネージャーにFormコントロールが無いのでできないのでしょうか。 Form2を作る目的は、Form2とForm1はそれぞれ別プロセスで動作させ、かつForm2は子ウインドウのように動作させる、すなわち、Form1の位置を変えると、Form2も移動し、かつForm2はForm1より常に前面に置くためですが、このようなことができるかどうかを確かめたいのです。 他にもっとスマートな方法があればご教示願えれば幸いです。 まったく別のexeのウインドウ(Form2に対応)をForm1からspawn関数により立ち上げることは、テストしているのですが、両者の位置関係が連動しない問題があるのです。SetWindowRectは目的が違うようです。

  • Formの外にある画面の色を取得

    Delphi XE3で始めたものです。 今まではアプリの自Formに画像をロードしてマウスをクリックするとその色を取得するものを作って動かしていましたが、最近自Formの外にある画面の色を取得するソフトがあることを知りました。 これをDelphiで作ってみたいと思いますがDelphiでこのようなことができる方法があったら教えてください。

  • Accessで入力用全画面Formと検索用子Formを表示させたい。

    こんにちは。 Accessで入力用Formと検索用の小さなFormを表示させたいと思っています。 具体的な動作は下記です。 入力用Form(親)からコマンドボタンを押して、マスタ一覧の別のForm(子)が起動します。 子Form一覧からレコードを選択すると、子フォーム終了と同時に親フォームへ値を設定します。 動作自体は問題ありませんが、 やりたいのは親ホームは全画面として、子フォームをその上に大きさを指定した 小さなウィンドウとして表示させたいと考えています。 親フォームを全画面で、子フォームを起動すると子フォームでサイズ指定(DoCmd.MoveSize)しても 全画面として起動されます。 親フォームを元のサイズとして、子フォームを起動するとサイズ指定が有効になり 画面の大きさは一応指定されます。 しかし、運用のディスプレイサイズがまちまちなので、親画面は全画面(DoCmd.Maximize)として起動し、 その上に小さなフォーム画面を乗せたいです。 色々と試しましたが、上手く行きません。 もし良い方法をご存知の方ご教授頂きたく宜しくお願い致します。

  • Form_Load と Form_Activate のタイミング

    あるデータ入力アプリを作っています。 親フォーム(Form0)で番号を決め、子フォーム(Form1,Form2,Form3,Form4) でデータ入力し、それぞれの子フォームを出るとき(Unload Me) に、変数にsaveしています。それを親フォーム(Form0)で登録を選択したとき、入力データをチェックしてDBに格納しています。 すでにDB格納済のデータの場合、親フォームでDBから変数に読み込み、子フォームのForm_Loadで展開しています。 そこで困っているのは、親と子のフォームを行き来するときにデータの表示で前のが残っていたり、消えてしまったりします。 Form_LoadとForm_Activateを通過するタイミングが、ちゃんと理解できていないためコードの記述位置が不適切なのだと思います。 Form_Load と Form_Activate の実行タイミングについて、お教えください。

  • Form1で宣言したインスタンスをForm2で使う

    開発環境はMicrofoft visual stdio 2005 で開発言語はC#を使い、Windousアプリケーションでプログラミングしているのですが、あるフォームで宣言したインスタンスを別のフォームで使う方法がわかりません。具体的にソースコードで説明すると using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace tesuto {   public partial class Form1 : Form   {     class Car     {       public int a;     }     public void Form1_Load(object sender, EventArgs e)     {       Car bike = new Car();//ここで宣言したインスタンスを       bike.a = 10;       Form2 fm2 = new Form2(this);       fm2.Show();     }   }   public partial class Form2 : Form   {     public void Form2_Load(object sender, EventArgs e)     {       int b;       b = bike.a;//ここでこのように使いたい     }   } } ということです。 前も似たような質問をさせていただき、たくさんの回答をいただいたにも関わらず自分のプログラム能力が低く、理解できませんでした><。なのでよければ、回答は言葉だけではなくこの上のソースコードを基にして(コピペ貼り付けなどで)、すこしでいいですのでソースコードを書いていただけませんでしょうか。 また、プログラミングを初めてまだ間もないので、すこし初心者向けでお願いします。 質問する側なのに色々要求をして申し訳ないのですが、もし御面倒でなければ御回答をお待ちしております。 よろしくおねがいします。 

  • VBでのフォームのロード

    こんにちは。 フォームを表示する際に、Form_Loadイベント内で色々処理をさせています。 私としては、その処理が終了した時点で画面が表示される、と思っていたのですが、画面が表示される際に、枠だけの半透明?のような感じのウィンドウが数秒表示されてから、通常の画面が表示されます。 Form_Load内の処理自体が重いのだと思い、以前別の質問をさせて頂いた際に教えていただいたDoEventsを、重そうな部分に挿入して試しているのですが直りません。 またInitializeイベント内で処理をしても同じようになります・・・ 何か対処法はありますでしょうか? よろしくお願いします。

  • Form1にForm2のデータを追記したい

    いつも大変参考にさせていただいております。 今いじっているページについて質問なのですが Form1とForm2があり、それぞれ別のデータが入っているのですが、 Form1のデータの後ろにForm2のデータを追記して、送信したいと考えております。 Form1 + Form2 ⇒ ○○○.cgi という、イメージです。 出来ればボタンを押すとForm2のデータがForm1に移り、「送信」ボタンを押すと一つになったデータが違うファイルに送信されるようにしたいのです。 可能でしょか??どうぞ宜しくお願いいたします。

  • FormのonsubmitでJavaスクリプトを複数使えますか

    こんにちは。 いまフォームページで送信前に記入漏れがないかチェックするのに、スクリプトを使っています。 <form action="../cgi-bin/form.cgi" method="post" name="bkform" onSubmit="return Check()"> このほかに、スパム防止のためJcapというスクリプト(画像で出てくる文字を入力させる)を使うことにしました。 画面上に表示はできるようになったのですが、こちらのスクリプトも <form method="post" action="/cgi-bin/form.cgi" onSubmit="return jcap();" name="xfrm"> というようにonsubmitが必要です。 この二つのスクリプトを1つのページで動かすことは可能なのでしょうか? ご教授お願いいたします・・・。

  • (VB2008)ShowDialogしたFormを閉じた時の、画面の挙

    (VB2008)ShowDialogしたFormを閉じた時の、画面の挙動について (VB2008EE、OSはVista) Form1からForm2を(ボタンのクリックイベントで) Dim f As New Form2 f.Show(Me) と記述して表示させたあと、 Form2の(ボタンのクリックイベントで) Me.Hide() として、Form2を閉じる記述を書きました。 で、Form2をShowDialogしてから、Hideを実行すると、 Form2が消えるのはいいのですが、残るForm1が、 ・デバッグ実行時は、VB2008EEのWindowの後ろに隠れてしまい、そのままとなる。 ・リリースビルドでは、さすがにそのままとはなりませんが、一旦Form1が  ちらつきます。 この回避策がありましたら教えてください。 。。。 ここからは、いろいろ実験した結果です。 ・試しに、Me.Hide()の後ろに、Threading.Thread.Sleep(5000)を 記述して実行すると5秒間Form1が後ろのアプリ画面に隠れた後、 Form1が前に表示される。 ・この場合の「後ろの別アプリのWindow」について、その別アプリが VB2008やエクスプローラだとForm2がそのアプリに隠れるのですが、 ExcelやIEだと、Form1が後ろに隠れることがないようです。。。 ・Hideではなく、Closeだと、後ろには隠れません。 (ただし、Closeの場合、Threading.Thread.Sleep(5000)の間はForm2は その前にClose()があっても、表示されたままSleepしその後閉じます) ・さらにShowDialog()でなく、Show()の場合、Owner指定して実行した場合は、 (つまりSHow(Me))全く問題なく、Form1が前面に表示されたまま 他のアプリが前に来ることはないのですが、 Ownerを指定せずにShowしたところ、ShowDialogと同様のことが起きるようです。 もし、これらの現象全体についてしっかりと説明できる方がいらっしゃれば、 説明もしていただけるとうれしいです。

専門家に質問してみよう