• ベストアンサー

unloadの使い方

iniファイルの内容を読み込んで表示・書き換え・再表示をする ミニプログラムを作っています。 (1)Form1でiniファイルの内容をForm1.textに表示させる。 (2)Com1でForm2に遷移。 (3)Form2.textに書き換え内容を入力、Com2で書き換え、Form1に遷移。 Form1.textには書き換えられた内容が表示されている…という結果を出したいのですが、 Com1に    Form2.show    Form1.hide と書いていた為、値の再表示が出来ませんでした。 そこで    Unload Form1    Form2.show と書いてみると、プログラムが終わってしまいました・・・。 順序を逆にしても同じ結果です。 Form1.textだけ、もしくはForm1全体を プログラムを終了させることなくunloadする方法がありましたら 教えてください。

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

  • ベストアンサー
  • haporun
  • ベストアンサー率40% (230/562)
回答No.2

vbMoval は vbModalの間違いです。 Form2.Show vbModal と書くと、Form1は終了したり非表示になったりはしませんが、Form2を閉じるまでは、Form1を触ってもまったく反応しないようになります。 Form2.show Form1.hide と書いても、それ以降のコードは実行されますよ。 Form2.show Unload Form1 と書くと、それ以降のコードは実行されません。 が、Form2が先にロードされるのでプログラムが終了することはありません。 これでももし終了してしまうとしたら、Form_UnloadイベントにEndステートメントが記述されていないか確かめてください。 もしくは、Form2のForm_Loadイベントで Unload Form1 を書く手段もあります。 ちなみに、テキストボックスなどの最初から配置されているコントロールだけをアンロードする方法はありません。

lovelypooh
質問者

お礼

回答ありがとうございます。 ご指摘の通り、Form1のUnload(QueryUnload)イベントにEndを記述していました。 このせいでプログラムが終了してしまったのですか? これを消して    Form2.show    Unload Form1 としたところ、やりたかった結果が出ました。 ちなみにForm2のForm_Loadイベントに Unload Form1 …という方法も 試したのですが、値の再表示が出来ませんでした。 後でまた書く位置などを変えて試してみます。 色々ていねいにありがとうございました。 また機会がありましたら教えてください(ペコリ)。

その他の回答 (2)

  • saruru
  • ベストアンサー率37% (3/8)
回答No.3

lovelypoohさんこんにちは。 まずzerosixさんの回答の補足なのですが、 これは、 call FormXXX.show(vbMoval) ではなく、 call FormXXX.show(vbModal) が正解です。(これはShowメソッドを調べると載ってます) vbModalをつけると、 呼び出し元のフォ-ムは呼び出したフォ-ムを閉じないとつつけなくなります。 もし、Form1からForm2を呼び出した際にForm1を非表示にする必要がないなら、 Call Form2.show(vbModal) で、Form2を表示し、Form2をUnloadするタイミングで、 変更内容をForm1に書き出せば、やりたいことは実現するのではないでしょうか。

lovelypooh
質問者

お礼

vbModalの説明、ありがとうございます。 ややこしくしないためにFormは常に1枚だけ表示を・・・、と考えていたのですが これを使えば問題なしってことですよね。 画面がパコパコ動くよりも、こっちの方が親切に思えます。 Form2で変更したiniファイルの内容をForm1で読み込み直す・・・というのが どうしてもできなかったので(Unloadのタイミングが悪いのか、プログラムが終了するのです…) saruruさんのアドバイス通り、Form2をhideする際に変更内容をForm1に直で書き出すようにしました。 何だかいい感じに動いております。 ありがとうございました。 また機会がありましたら教えてやってください(ペコリ)。

  • zerosix
  • ベストアンサー率31% (47/149)
回答No.1

ちょっとあまり考えてませんが、 call FormXXX.show(vbMoval) と記述してやってみてください。どうでしょうか?

lovelypooh
質問者

補足

早速の回答ありがとうございます。 すみません、この記述はどこに書くのでしょうか? Com1に    call Form1.show(vbMoval) と書いてみましたところ、変数が宣言されていないとのことで とりあえず    Dim vbMoval とだけ書いて実行したところ、エラーは出ませんでしたが Form1が表示されたままForm2が出て、変更後もForm1.textは変わっていませんでした。 このcall Form1.show(vbMoval)とはどんな役目をするのですか? vbMovalって何ですか?(ヘルプでは該当なしと出ました) 何分素人なもので…。 よろしければまた教えてください。

関連するQ&A

  • VC++2005 Form1とForm2のデータのやりとり

    現在VC++2005でプログラムをしています。 そこでForm1で表示されているテキストボックスの中身をForm2のテキストボックスに表示するのはどのようにすればよいのでしょうか? ちなみに、Form2の表示は下記のプログラムで行っています。 ―Form1.hの内容― #include "Form2.h" Form2^ newMDIChild = gcnew Form2(); newMDIChild->Show(); ―Form2.hの内容― this->Hide(); というので表示を消しています。 初歩的な質問だと思いますがよろしくお願いします。

  • 自殺プログラム-自らunload するfrm

    言語 Visual Basic 6.0(SP5) 自殺プログラム-条件が成立したら自分自身を消去するプログラム-として タイマー条件付 「MsgBox 関数」モドキを作りたい(実際に作る内容はオーバーレイプログラムとして通信関係資源を含む外部資源の操作等も含みます)のですが 経過時間表示をしない「MsgBox 関数モドキ」 と タイマーで終了(unload)せず手作業が必須な「MsgBox 関数モドキ」(非表示には成功しました) と 親frmまで殺す「MsgBox 関数モドキ」 の作成には成功しました。 MsgBoxModoki.Show 等で参照した MsgBoxModoki.frm が 1.手作業を伴わずに何かしらの表示を伴う手続きを実行する命令(ヘルプメッセージの検索用語すらわかりません)等 2.自らunloadするようにする命令等 ご存知の方いらっしゃいませんか。いらっしゃったらば命令や検索語をお知らせください。

  • 別フォームの呼び出し

    6.0でやってます。 form1からform2を呼び出す時、Command1_Clickの処理内で Set FORM = New form2 Call FORM.Show と書いて、form2が呼び出されたらYesNoメッセージボックスを表示し、 Yesを押したらform1のPublicプロシージャに飛んでからform2をUnloadし、Noだったらform2をUnloadするプログラムを作りたいのですが、クリックするとform2が表示されずに、メッセージボックスだけが表示されて、YesNoを選択した後でform2が表示されてしまいます。 それに、Call FORM.Showの処理に行くと、"既にアンロードされています"といったエラーが出ます。 書く順番がおかしいのでしょうか? *****form1のコード******* Private Sub Command1_Click() Set FORM = New form2 Call FORM.Show End Sub Public sub aaa() (処理) End Sub *****form2のコード****** Private Sub Form_Load() msg = MsgBox("戻りますか??", 4, "確認メッセージ") If msg = vbYes Then Form1.aaa Unload Me Else Unload Me End If

  • C#でのForm間のデータ受け渡し、保存について。

    C#でシステム作成をしています。WindowsFormApplicationです。 どのようなシステムかと申しますと、学習システムです。 親フォームForm1には、問題ページForm2へ行くボタン、保存ボタン、開くボタンが配置されています。 問題ページForm2へ行くと、数十個の数字labelがあり、この各labelから実際の問題へ、つまり、Form3、Form4、…と行きます。 さらにForm3、Form4、…の各問題を終える度に、Form3、Form4…からその都度別Forms(集計のsとしておきます。)を開いて集計していきます。(数値を扱うので。) Form1からForm2は同時表示、Form2のlabelからのForm3、4…はForm2をHideして表示(Hideについては後述)、Form3、4…からFormsは、もちろん3、4を参照しながら集計するので同時表示です。 Form2のHideについては、例えばForm3の問題を解き、Formsを開いて集計したなら、Form3をCloseすると、Form2を再度ShowしてForm3へのlabelのForeColorを変化させます。同時にFormsはHideします。(また次のForm4で使うため。)変色labelを再度押すと、「解答済みです」とMessageBoxに表示して行けなくなります。 このように進めていくタイプのシステムを作成しています。 以上まではうまくいきました。 ここからが問題です。 Form2のlabelの色は、Form2を閉じない限りはもちろん保持されます。しかし、閉じて再度Form1から表示すると色が保持されているプログラムを書きたいのですが、どのようにすればいいでしょうか? ちなみにHideではだめだと思います。なぜなら、初めてこのシステムに取り掛かる際、Form1からForm2を表示する時に、HideされたForm2はまだ存在しないからです。 だからデータの受け渡し、つまり、Form2を閉じる時にForm1へデータを渡し、再度開く際にForm2へそのデータを返す、というイメージですかね。 インターネット上では、テキストボックスのテキストデータの例ばかりでしっくりきません。 渡すとしてもForm1のどこに渡すのか(どこにプログラムを?)も分かりません。 Form2から受け取る際は、Loadイベントでしょう。Form2から渡す際はClosedイベントで渡すとは思いますが…。 そしてあと一つ、Form1の保存ボタン、開くボタンのプログラムです。 学習システムで少しずつ進めていくプログラムですから、この日はここまで、と保存していく必要があります。 それを開く意味で、開くボタンも付けています。 このプログラムも難しくて分からないところですが、これも質問すると質問が多くなるため置いておきます。(というより先述の受け渡しのプログラムの質問が優先です。) 質問は、このシステムのForm1から保存することで、きちんと進度は保存されるかということです。 ある日、あるところまで問題を解き(labelの色を変え)、集計し終えたとします。 そして保存して、別の日に開くとForm1が現れます。 このForm1からForm2へ行くと、ちゃんと色が保持されたプログラムは書けるでしょうか? (ちゃんとデータの受け渡しプログラムを書いたと想定。要はlabelの変色のみ保存できればいいのです。) そしてFormsへ飛ぶと、データは保持されているでしょうか? Formsは先述しましたが、集計し終えるとHideするのみです。つまりFormsは初めて表示したらもうCloseはしません。 このようにHideしたFormの状態も保持することはできるでしょうか?

  • フォームのアクティブと非アクティブ表示について

    Form1からForm2を表示するという処理を以下のようにコーディングしてみました。 **Form1.frm*** Private Sub Command1_Click() Form1.Hide Form1.vbModal Form1.Show End Sub **Form2.frm*** Private Sub Command1_Click() Unlaod Me End Sub 画面にエクスプローラ等のウィンドウが表示されているときに、Form2を表示させようとすると非アクティブ状態で表示されてしまいます。 また、Form2をUnloadするとForm1が表示されるのですが、その際に、Form1のタイトルと、タスクバーに表示されているボタンが反転した後非アクティブ状態になってしまいます。 フォームは常にアクティブで表示させたいのですが、どうすればよいのでしょうか?

  • (VB2008EEです)Form1からForm2をモーダレスで表示(S

    (VB2008EEです)Form1からForm2をモーダレスで表示(Show(Me))したのち、 Form2を、(Form2の)閉じるボタン(右上にあるXボタン)で閉じるときに、 単にHideするだけの処理に変更することは可能でしょうか。 デフォルトでは、閉じるボタンですと、Close()と同様、 Close(&Dispose)となると思いますが、Hide()処理に 変えられるかということです。 。。。 試しに、FormClosingイベントハンドラでHide()→e.cancel=Trueって やってみたところ、(再度同じForm2のインスタンスを使ってShowができ、 さらに前回のText表示などが残っているなど)その場はうまく行ったように 見えたのですが、そうすると、アプリ(Form1)が閉じるボタンで終了しなくなって しまいました。 (Application.Exitでもダメ、Endでは(強制終了とのことなので)OKですが) Form2のClose処理をCancelしているからだ、とは思いますが。 ShowDialog→Xボタン(同じ記述のまま) の後では、終了可能です。 では、Show→Xボタンのあとで、同じインスタンスで、上記と同じように、 ShowDialog→Xボタンとしたあと、Form1のXボタンでアプリを 終了させようとするとどうなるか。 結果は、終了不能でした。 一度Show→Xしたらそれをどこかに覚えている?ってことなのでしょうか。。。 ここらへんの現象まで、合わせて説明できる方がいらっしゃったら 合わせてご説明いただけませんでしょうか。 。。。 なお、なぜこんなことするの?という実際論はここではなしで 純粋に技術論でお願いいたします。

  • Hideについて(.NET)

    Form1をHideで非表示にし、Form2を開いた後、再びForm1を表示したいのですがうまくいきません。 [form1のイベント] Dim frmForm2 as New Form2 frmForm2.Show Me.hide Sub End [form2のイベント] Dim frmForm1 as New Form1 frmForm1.Show Me.Close Sub End としてあります。 非表示されたフォームを再表示されずに、新しくフォームが開いてしまっていると考えられるんですが、どうしたらよいでしょうか? 

  • エクセルのマクロでUserForm1を作って下記のようなコードを実行す

    エクセルのマクロでUserForm1を作って下記のようなコードを実行すると UserForm1を一瞬だけ表示して消えるのかと思ったのですが、表示されたまま消えません。 Unload UserForm1のところを UserForm1.Hideにしても同じです。 表示されたUserForm1を閉じるにはどうしたらよいですか。 Sub test() UserForm1.Show Unload UserForm1 End Sub

  • C#で初歩で引っかかってしまいました

    C#で今まで一つのFormの中でしかプログラムを組んでいませんでしたので 初歩の所で引っかかってしまい すいませんが教えていただけませんか? Form1のLoadで string A = "a" を 代入し Form2でAの内容を表示するにはどうしたらいいでしょうか? フォームの表示 や MessageBox.Showの仕方はわかるのですが 元のフォームから値を引っ張ることができません public string A で指定をしても値が引っ張ってこれません よろしくお願いいたします。

  • form2 から form1に戻ったとき、form1のTextboxの内容を消したくないのですが

    .NETのBasicでform1からform2に移行するため Dim F2 As New Form2() Me.Hide() F2.Show() この後、form1にもどるため Dim F1 As New Form1() F1.Show() Me.Hide() 上記のように書くと、form1のTextboxの内容が消えてしまいますよね。 これを消さずにまたform1のTextboxの編集が続けられるようにしたいのですが、どうすればいいでしょうか ただ単にform1を見えなくする方法が違うのでしょうか 初歩的な質問ですいません。