プロが教える店舗&オフィスのセキュリティ対策術

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

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

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

皆様宜しくお願いします。

A 回答 (10件)

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



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

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

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

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

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

お礼日時:2001/12/03 19:48

あの、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
    • good
    • 0

すみません!!下のコードに間違いがありました。

Label2は下記のコードを使ってください。
間違いの点は、このコードは、本来Timer2を
アクティブにするのに、Timer1をアクティブにしていました。
大変ご迷惑おかけいたしました。

Private Sub Label2_Click()
Label2.Caption = "Form2開く"
Timer2.Enabled = True
End Sub
    • good
    • 0

小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
    • good
    • 0

こんにちは。

itohhといいます。

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

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

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

お礼日時:2001/12/03 19:50

こんにちは。

itohhといいます。

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

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

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

あ、ゴメン。

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

少し蛇足になりますが、#1でannie_xさんがお書きになった「Hide」はフォームを「隠す」為のコマンドで、「閉じる」とは意味合いが異なります。



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

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



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

UnLoad Form1


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

>「Form1」を閉じるためのコマンド



Form1.Hide です。

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

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

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

この回答への補足

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

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

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

Mail.hide

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

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

説明が足りなくて申し訳ありません。

補足日時:2001/12/03 00:30
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています