• ベストアンサー

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

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

  • メインフォームとサブフォームについて

    こんにちは。 VBを勉強中の初心者です。 今メインとして使っているフォームをForm1とします。 サブとして使っているフォームをFrom2とします。 プログラムの実行時にForm1がでてくるのですが、 Form1を起動せず、Form2を起動したいです。 (メインフォームとサブフォームを入れ替えたいです) この場合はどうすればいいでしょうか? よろしくお願いします。

  • VB6.0のフォーム間の関数呼び出しについて

    VB6.0のフォーム間の関数呼び出しについて いつもお世話になっております。 これまでVB2005で開発を行ってきたのですが、 これまでの資産の関係上VB6.0での開発を行う必要が出てまいりました。 現在下記のようになっております。 フォーム1:Form1    関数:keisan フォーム2:Form2 Form1ではテキストボックスコントロールを利用した関数keisanがあります。 その関数をForm2上から呼び出すことは可能でしょうか? 以下のやり方では実行できそうでしょうか? call Form1.keisan 初歩的な質問で申し訳ございません。 なにとぞアドバイスをいただけると幸いです。

  • フォームロードについて

    VB2008で、Form_Load()に Me.Visible = falseや Me.Close()としてもフォームの非表示やフォームを閉じたりしないのですが、なぜなのでしょうか? 最初に起動した場合に、Form_Loadで初期設定を行った後に、自動的に直ぐにフォームを非表示や閉じることをしたいです。

  • フォームがリサイズされた時の各コントロールの位置変更コードについて

    教えてください。 前々から疑問だったのですが、VBでフォームをリサイズした場合に それぞれのコントロールもそれに合わせて大きさが変更されたり 移動したりという状態にするには、当然Form_Resizeのコードを 書く必要があると思うのですが、VBでツールを作成される方は 皆さんひとつひとつのコントロールの位置を計算しながら毎回 コードを書いているのでしょうか? OCXなどを使うと、勝手にコントロールの位置を調整してくれるものも ありますが、やはり皆さん自分でコードを書いていらっしゃるのでしょうか? 私が分かるのは、フォームにテキストボックスのみを貼り付けて、 Private Sub Form_Resize() Form1.text1.Top = 0 Form1.text1.Left = 0 Form1.text1.Width = ScaleWidth Form1.text1.Height = ScaleHeight End Sub と書くと、リサイズに合わせてテキストボックスが画面いっぱいにサイズ変更 するというものです。 コマンドボタンとか色々貼り付けた状態ではどのように書けばいいのか いまひとつ分かりません。 皆さんはどのようにされているのでしょうか? 是非是非教えてください。

  • MDIでフォームがアクティブにならない

    VB2008です。 MDIフォーム中にForm1とForm2があります。 Form1がアクティブです。 Form2をクリックしてもアクティブになりません。ただしタイトルバーをクリックするとアクティブになります。 これは言語の仕様でしょうか。市販のアプリケーションでは、タイトルバー以外の場所をクリックしてもアクティブになるものがほとんどですが、VB2008ではどのようにすれば実現できるのでしょうか。

  • 子フォームから開いたフォームと親子関係を結びたい(VB2003)

    子フォームから開いたフォームと親子関係を結びたい(VB2003) VB.NET2003についての質問です。 formMain のクラスに以下のコードを書いて実行させると、form1がformMainの子フォームとして開きます 下記は、「form1」を「formMain」の子フォームとして開くコードです。 (formMainクラス内のコードです)   ------------------------------   Dim f As New form1   Me.IsMdiContainer=True   f.MdiParent=Me   f.Show   ------------------------------ form1には、form2を開くボタンが用意されています。 質問内容は、このform2を、formMainの子フォームとして開くにはどうすればよいか、ということです。 ためしに、form1クラスに以下のコードを書いて実行させたところ、 「formMainは型であるため、式として利用することができない」というエラーメッセージが出てしまいました。   ------------------------------   Dim f As New form2   f.MdiParent = formMain   f.Show()   ------------------------------ 以上、よろしくお願い致します。

  • VB2008 デバッグを実行すると作成したフォームとは違い、Form1が表示されます

    VB2008をはじめたばかりの初心者です。 ファイル入出力のプログラムを書いて、フォームも作成(OpenFileDialogなどを使用)しました。 デバッグを実行すると、フォームでファイル入出力ができるようになる予定なのですが、 「Form1」という何もないフォームがでてきます。 (はじめに手を加えていない、Form1というものがなぜか表示されます。もちろんボタン等もありません) 実際に作成したフォームは、frmWav.vbというプログラムのため、フォームの名前もfrmWav.vb[デザイン]となっています。 デバッグ自体はエラーとはならないため、原因がわかりません。どうかご回答おねがいします!!

  • 任意のフォームが表示されているかを知りたい

    VB6で、 任意のフォームが表示されているか表示されていないかを知りたいのですが、その方法がわかりません。 具体的に言うと、 いくつかのフォームのあるアプリケーションを作っているのですが、Form2のである処理をしたときに、Form1が画面上に表示されている場合と、表示されていない場合で、異なる処理をしたいのですが、ためしにVisibleやEnableを参照しようとすると、(Form1を表示していない場合)その時点でForm1がロードされ、表示されてしまいます。 そこで、任意のフォームが現在表示されているかどうかを知るプロパティや関数はありますでしょうか? ご存知の方、ご教授お願いいたします。

  • 特定のフォームが開いているか確認したい。

    Form1、Form2が開いている状態で、Form3が開いているかどうか(アクティブかどうか関係なく開いてるか開いていないかだけ)確認したい場合どのように書けばよいのでしょうか。 環境はVB.NETです。

  • 2つ目の送信フォーム

    皆様にお聞きし無事、送信フォームを自分のHPに付けることができました。 のですが、2つ目3つ目と作ろうと思ったら思うようにうまくいきません。 僕のサーバーはcgi-binというフォルダを置かなくてそのままpublic_htmlに 設置O.Kだったのでpublic_htmlに 1.form1.html 2.form1.cgi 3.thanks.html(送信後に表示されるページ) 4.tempディレクトリ を置いていました。 そこに新しくform2.htmlとform2.cgiを置いたのですが tempディレクトリは名前が同じなのでアップしても上書きになってしまうと思い なにもふれなかったせいか、form2.htmlを開き フォームに記入し送信したらエラー警告ページが表示されます。 (送信後表示されるページはthanks.htmlでform1と同じです。) 2つ目を設置するにはどうすればよいのでしょうか? 教えてください、お願いします。。 ちなみに、1つ目のフォームは順調に作動しています。 WIN98,OE

    • ベストアンサー
    • CGI