• ベストアンサー

フォームのクローズについて

vb6.0においてのフォームについて教えてください。 例として「Form1」という名前のフォームがあるとします その「Form1」を閉じるためのコマンドを誰か教えていただけないでしょうか? ちなみに「Form1」はアクティブになっている時、いない時両方の場合が 考えられるのですが、関係あるのでしょうか?? 皆様宜しくお願いします。

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

  • ベストアンサー
  • TAGOSAKU7
  • ベストアンサー率65% (276/422)
回答No.7

itohhさんの回答にちょっとだけ補足します。 他のアプリケーションであっても、自分自身のアプリケーションであってもメッセージボックスの制御は基本的に可能です。 まず、他アプリのメッセージボックスの場合はFindWindowでメッセージボックスを検索し、ダイアログのハンドルを得るのは必須です。 ↓これについて補足 >SendMessage関数でWM_CLOSE それ以外に情報が必要です。メッセージボックスの中に「はい」「いいえ」ボタンがあって、「いいえ」ボタンを押したようにして閉じたいのであれば、「いいえ」ボタンのハンドルとvbNo定数値が必要です。 それらをSendMessageにてWM_CLOSEと一緒に送らないと、WINDOWS自体が不安定になります。

tomoyui
質問者

お礼

的確なアドバイスありがとうございます 早速試してみたいと思います。

その他の回答 (9)

  • kunpa
  • ベストアンサー率14% (1/7)
回答No.10

あの、2回間違いと、申し訳ないのですが、TimerなどのIntervalは プロパティウィンドウじゃないと効果ありませんでした。 下のコードのスペースが3つ、ついてるところは消したほうが 効率いいかもしれません。 Private Sub Timer1_Timer()    Timer1.Interval = 1000 End End Sub Private Sub Timer2_Timer()    Timer2.Interval = 1000 Unload Form1 Form2.Show End Sub

  • kunpa
  • ベストアンサー率14% (1/7)
回答No.9

すみません!!下のコードに間違いがありました。Label2は下記のコードを使ってください。 間違いの点は、このコードは、本来Timer2を アクティブにするのに、Timer1をアクティブにしていました。 大変ご迷惑おかけいたしました。 Private Sub Label2_Click() Label2.Caption = "Form2開く" Timer2.Enabled = True End Sub

  • kunpa
  • ベストアンサー率14% (1/7)
回答No.8

小4のkunpaです。  単に、Form1を終了して、別のForm(例として、Form2)を開くのであれば、 「Unload Form1 Form2.Show」と書けば、Form1を閉じて、Form2を開くことができます。 これを利用すれば、タイマーコントロールで設定できます。 また、ソフトを終了するなら、「End」というコードを書き込めば、 ソフトが終了します。  なので、Formがアクティブになっていない時も、タイマーコントロール (例:Interval 1000=1秒)のコードに[Unload Form1                   Form2.Show]または[End]のコードを 書き込んでしまえば、Formがアクティブでなくても、タイマーで設定した Intervalの時間になれば、UnloadまたはEndします。  タイマーのEnabledをFalseにして、LabelをクリックしたらEnabledをTrueに しても面白いです。  サンプルコードです。Labelを、 「終わり(Label1)」と「Form2開く(Label2)」を用意して、終わりをクリックすると、1秒後に終わって、Form2開くをクリックすると1秒後に閉じるコード です。Timerのコードを抜けば、簡単なプログラムに使えます。 CaptionとIntervalはプロパティウィンドウで設定してもいいです。 Timer1とTimer2のEnabledはプロパティウィンドウで Falseにしておいてください。 参考になれば幸いです。 Private Sub Label1_Click() Label1.Caption = "終わり" Timer1.Enabled = True End Sub Private Sub Label2_Click() Label2.Caption = "Form2開く" Timer1.Enabled = True End Sub Private Sub Timer1_Timer() Timer1.Interval = 1000 End End Sub Private Sub Timer2_Timer() Timer2.Interval = 1000 Unload Form1 Form2.Show End Sub

  • itohh
  • ベストアンサー率45% (210/459)
回答No.6

こんにちは。itohhといいます。 先のアドバイスちょっと間違いがありました、すみません。 >自分自身のメッセージボックスを制御するのは基本的に出来ないと思った方がよいですよ。 正しくは、 自分自身以外(他のプロセス)のメッセージボックスを制御するのは基本的に出来ないと思った方がよいですよ。

tomoyui
質問者

お礼

なるほど、やっぱり自分自身以外のMSGBOXの制御は 難しいんですね..ためになりました。 ありがとうございました

  • itohh
  • ベストアンサー率45% (210/459)
回答No.5

こんにちは。itohhといいます。 >プログラム上であるソフトを起動するとメッセージが立ち上がって >くるので、そのメッセージボックスを閉じたいのですが... 自分自身のメッセージボックスを制御するのは基本的に出来ないと思った方がよいですよ。 例えば、そのメッセージボックスを閉じてしまった場合、起動したソフトまで終了してしまう ということはないですか? それでも、OKでしたらば。 1.FindWindow関数でWindowハンドルを取得する。 2.そのWindowハンドルにSendMessage関数でWM_CLOSEを送信する。 これで、閉じてくれるとは思いますが、先にも説明したようにソフト自体が終了して しまうかもしれません。

  • annie_x
  • ベストアンサー率50% (65/129)
回答No.4

あ、ゴメン。「閉じ」たかったのね。勘違いしてたので最初の回答は無視して下さい。 ARCさんありがとうございます。

  • ARC
  • ベストアンサー率46% (643/1383)
回答No.3

少し蛇足になりますが、#1でannie_xさんがお書きになった「Hide」はフォームを「隠す」為のコマンドで、「閉じる」とは意味合いが異なります。 フォームを隠しただけでは、まだメモリ上にフォームの内容が保持されています。 (つまり、Form1上のテキストボックスに何か入力したあと、 Form1.Hide Form1.Show としても、入力した内容が残った状態でフォームが再表示されます。 Unload Form1だと、メモリ上からもフォームを削除してしまいますので、 Unload Form1 Form1.Show とすると、Form1上のテキストボックスの内容は初期化されます。 #annie_xさま、つっこんじゃってスミマセン。この文章は回答に正確を期すために投稿しました。個人攻撃の意図は全く無いことをご理解ください。 お気を悪くなさらないで下さいね(^^;

  • ARC
  • ベストアンサー率46% (643/1383)
回答No.2

UnLoad Form1 をお試しください。 Form1のアクティブ/非アクティブに関係なく、Form1を閉じてくれます。

  • annie_x
  • ベストアンサー率50% (65/129)
回答No.1

>「Form1」を閉じるためのコマンド Form1.Hide です。 >「Form1」はアクティブになっている時、いない時両方の場合が考えられるのですが 具体的にコードを見ないとなんともいえませんが、普通は関係ないですよ。 ちなみに表示させるときは Form1.Show です。 このあたりフォームのヘルプから、「メソッド」を見てみると書いてあると思います。

tomoyui
質問者

補足

プログラム上であるソフトを起動するとメッセージが立ち上がって くるので、そのメッセージボックスを閉じたいのですが... そのメッセージは最小化の状態でタイトルバーに”Mail”と かかれた状態で立ち上がってくるので、 オブジェクトの名前が"Mail"なのだと思って、 Mail.hide としたら”オブジェクトが必要です”とエラー表示されてしまいました。 このメッセージボックスをプログラム上で閉じるように制御する方法 を知りたいのです。 説明が足りなくて申し訳ありません。

関連するQ&A