OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

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

  • すぐに回答を!
  • 質問No.178661
  • 閲覧数238
  • ありがとう数4
  • 気になる数0
  • 回答数10
  • コメント数0

お礼率 21% (29/134)

vb6.0においてのフォームについて教えてください。

例として「Form1」という名前のフォームがあるとします
その「Form1」を閉じるためのコマンドを誰か教えていただけないでしょうか?

ちなみに「Form1」はアクティブになっている時、いない時両方の場合が
考えられるのですが、関係あるのでしょうか??

皆様宜しくお願いします。
通報する
  • 回答数10
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.7
レベル12

ベストアンサー率 65% (276/422)

itohhさんの回答にちょっとだけ補足します。

他のアプリケーションであっても、自分自身のアプリケーションであってもメッセージボックスの制御は基本的に可能です。

まず、他アプリのメッセージボックスの場合はFindWindowでメッセージボックスを検索し、ダイアログのハンドルを得るのは必須です。

↓これについて補足
>SendMessage関数でWM_CLOSE

それ以外に情報が必要です。メッセージボックスの中に「はい」「いいえ」ボタンがあって、「いいえ」ボタンを押したようにして閉じたいのであれば、「いいえ」ボタンのハンドルとvbNo定数値が必要です。
それらをSendMessageにてWM_CLOSEと一緒に送らないと、WINDOWS自体が不安定になります。
お礼コメント
tomoyui

お礼率 21% (29/134)

的確なアドバイスありがとうございます
早速試してみたいと思います。
投稿日時 - 2001-12-03 19:48:49
-PR-
-PR-

その他の回答 (全9件)

  • 回答No.3
レベル13

ベストアンサー率 46% (643/1383)

少し蛇足になりますが、#1でannie_xさんがお書きになった「Hide」はフォームを「隠す」為のコマンドで、「閉じる」とは意味合いが異なります。 フォームを隠しただけでは、まだメモリ上にフォームの内容が保持されています。 (つまり、Form1上のテキストボックスに何か入力したあと、 Form1.Hide Form1.Show としても、入力した内容が残った状態でフォームが再表示されます。 ...続きを読む
少し蛇足になりますが、#1でannie_xさんがお書きになった「Hide」はフォームを「隠す」為のコマンドで、「閉じる」とは意味合いが異なります。

フォームを隠しただけでは、まだメモリ上にフォームの内容が保持されています。
(つまり、Form1上のテキストボックスに何か入力したあと、
Form1.Hide
Form1.Show
としても、入力した内容が残った状態でフォームが再表示されます。

Unload Form1だと、メモリ上からもフォームを削除してしまいますので、
Unload Form1
Form1.Show
とすると、Form1上のテキストボックスの内容は初期化されます。



#annie_xさま、つっこんじゃってスミマセン。この文章は回答に正確を期すために投稿しました。個人攻撃の意図は全く無いことをご理解ください。
お気を悪くなさらないで下さいね(^^;


  • 回答No.2
レベル13

ベストアンサー率 46% (643/1383)

UnLoad Form1 をお試しください。 Form1のアクティブ/非アクティブに関係なく、Form1を閉じてくれます。
UnLoad Form1
をお試しください。
Form1のアクティブ/非アクティブに関係なく、Form1を閉じてくれます。
  • 回答No.1
レベル10

ベストアンサー率 50% (65/129)

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

Form1.Hide です。

>「Form1」はアクティブになっている時、いない時両方の場合が考えられるのですが

具体的にコードを見ないとなんともいえませんが、普通は関係ないですよ。

ちなみに表示させるときは Form1.Show です。
このあたりフォームのヘルプから、「メソッド」を見てみると書いてあると思います。
補足コメント
tomoyui

お礼率 21% (29/134)

プログラム上であるソフトを起動するとメッセージが立ち上がって
くるので、そのメッセージボックスを閉じたいのですが...

そのメッセージは最小化の状態でタイトルバーに”Mail”と
かかれた状態で立ち上がってくるので、

オブジェクトの名前が"Mail"なのだと思って、

Mail.hide

としたら”オブジェクトが必要です”とエラー表示されてしまいました。

このメッセージボックスをプログラム上で閉じるように制御する方法
を知りたいのです。

説明が足りなくて申し訳ありません。
投稿日時 - 2001-12-03 00:30:25
  • 回答No.4
レベル10

ベストアンサー率 50% (65/129)

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

ベストアンサー率 45% (210/459)

こんにちは。itohhといいます。 >プログラム上であるソフトを起動するとメッセージが立ち上がって >くるので、そのメッセージボックスを閉じたいのですが... 自分自身のメッセージボックスを制御するのは基本的に出来ないと思った方がよいですよ。 例えば、そのメッセージボックスを閉じてしまった場合、起動したソフトまで終了してしまう ということはないですか? それでも、OKでしたらば。 ...続きを読む
こんにちは。itohhといいます。

>プログラム上であるソフトを起動するとメッセージが立ち上がって
>くるので、そのメッセージボックスを閉じたいのですが...
自分自身のメッセージボックスを制御するのは基本的に出来ないと思った方がよいですよ。

例えば、そのメッセージボックスを閉じてしまった場合、起動したソフトまで終了してしまう
ということはないですか?

それでも、OKでしたらば。
1.FindWindow関数でWindowハンドルを取得する。
2.そのWindowハンドルにSendMessage関数でWM_CLOSEを送信する。
これで、閉じてくれるとは思いますが、先にも説明したようにソフト自体が終了して
しまうかもしれません。
  • 回答No.9
レベル6

ベストアンサー率 14% (1/7)

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

Private Sub Label2_Click()
Label2.Caption = "Form2開く"
Timer2.Enabled = True
End Sub
  • 回答No.8
レベル6

ベストアンサー率 14% (1/7)

小4のkunpaです。  単に、Form1を終了して、別のForm(例として、Form2)を開くのであれば、 「Unload Form1 Form2.Show」と書けば、Form1を閉じて、Form2を開くことができます。 これを利用すれば、タイマーコントロールで設定できます。 また、ソフトを終了するなら、「End」というコードを書き込めば、 ソフトが終了します。  なので、Formがア ...続きを読む
小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
  • 回答No.6
レベル12

ベストアンサー率 45% (210/459)

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

先のアドバイスちょっと間違いがありました、すみません。

>自分自身のメッセージボックスを制御するのは基本的に出来ないと思った方がよいですよ。
正しくは、
自分自身以外(他のプロセス)のメッセージボックスを制御するのは基本的に出来ないと思った方がよいですよ。
お礼コメント
tomoyui

お礼率 21% (29/134)

なるほど、やっぱり自分自身以外のMSGBOXの制御は
難しいんですね..ためになりました。
ありがとうございました
投稿日時 - 2001-12-03 19:50:49
  • 回答No.10
レベル6

ベストアンサー率 14% (1/7)

あの、2回間違いと、申し訳ないのですが、TimerなどのIntervalは プロパティウィンドウじゃないと効果ありませんでした。 下のコードのスペースが3つ、ついてるところは消したほうが 効率いいかもしれません。 Private Sub Timer1_Timer()    Timer1.Interval = 1000 End End Sub Private Sub Time ...続きを読む
あの、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
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ