DOBON.NET DOBON.NETプログラミング掲示板過去ログ

Formの閉じるボタン

環境/言語:[XP]
分類:[.NET]

 こんにちは。

1つ教えて下さい。

VB2005にてアプリケーションを作成しています。

アプリを終了するのに
Buttonをクリックしたら、終了しますか?と
メッセージボックスを表示しOKなら Me.Close()します。
そのためButton_Clickイベントの上記内容を記述しました。

同様にForm右上のXのボタンでも
同じようなことをしたいのですが可能でしょうか?
FormClosingイベントを調べてみて下さい。
  • 題名: Re[1]: Formの閉じるボタン
  • 著者: IIJIMAS
  • 日時: 2007/09/28 12:08:47
  • ID: 20593
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
■No20591に返信(WONさんの記事)

Form.FormClosing イベント
http://msdn2.microsoft.com/ja-jp/library/system.windows.forms.form.formclosing(VS.80).aspx

FormClosingEventHandler デリゲート
http://msdn2.microsoft.com/ja-jp/library/system.windows.forms.formclosingeventhandler(VS.80).aspx

FormClosingEventArgs クラス
http://msdn2.microsoft.com/ja-jp/library/system.windows.forms.formclosingeventargs(VS.80).aspx

をご参照ください。
■No20592に返信(trapemiyaさんの記事)

 ありがとうございます。

ブール型のフラグを使いまして
ボタンをクリックした時はTrue、それ以外はFalseにして

FormClosingイベントに

If bln = False Then
e.Cancel = True
  メッセージ「閉じるボタンでは終了できません」
End If

とコーディングしましたが、ブール型のフラグで判断は
おかしいでしょうか?
■No20597に返信(WONさんの記事)
> とコーディングしましたが、ブール型のフラグで判断は
> おかしいでしょうか?

おかしくはないですが、今回のケースではCloseReasonプロパティが使えるかもしれませんね。

フォームが閉じられる時その原因を知る
http://dobon.net/vb/dotnet/form/unloadmode.html
■No20598に返信(trapemiyaさんの記事)
> ■No20597に返信(WONさんの記事)


Resありがとうございます。

でも両方
Case CloseReason.UserClosing
Debug.WriteLine("ユーザーインターフェイスによる")

になってしまいます。
■No20601に返信(WONさんの記事)
> でも両方
> Case CloseReason.UserClosing
> Debug.WriteLine("ユーザーインターフェイスによる")
>
> になってしまいます。

なるほど。そうですね。私の早合点でした。ごめんなさい。m(_ _)m
目的からはこちらのほうでしょうか。
http://dobon.net/vb/dotnet/form/disabledclosebutton.html

ただ、本来はControlBox=Falseにすべきかな?
最大化最小化も消えちゃいますが。

あとは、「Xでは閉じれません」ではなくて、
・閉じるボタンはMe.Closeのみ
・FormClosingで閉じようとするときの処理をおこなう
と、FormClosingに集約する方法もあります。
#本来はそこにDB更新とかは書きたくない気持ちはあるけれど
■No20603に返信(まどかさんの記事)

 ありがとうございます。
 
Application.Exit()にて対応しようかと思いますが
Me.Close()をApplication.Exit()に変えて
まずい点はありますか?
> Me.Close()をApplication.Exit()に変えて
> まずい点はありますか?

単なる代替手段ではないことに注意してください。
その名のとおりアプリケーションそのものを終了させるメソッドです。
ヘルプで解説をお読みになり、副作用(挙動)を理解した上で
そのフォームの終了がアプリケーションの終了と等価である事を検証した上で使用してください。
■No20605に返信(まどかさんの記事)

Application.Exitメソッド
通常はメインフォームを閉じるとアプリケーションは終了します。
これとは別の方法として、Application.Exitメソッドによりアプリケーション
を終了することも出来ます。

補足:「通常」というのは、Application.Runメソッドの
パラメータにメインフォームを指定してアプリケーションを開始したり、
VB.NETでエントリポイントにメインフォームが
指定されているというような場合のことです。

Application.Exitメソッドを呼び出して終了させた時、
現在開いているすべてのフォームが閉じられます。

という記事を見付けました。


ネットで見るサンプルソースは、そのほとんどが
Form.Closeですよね。

Application.Exitを使っていない理由がよく解らないです...
■No20591に返信(WONさんの記事)
>  こんにちは。
>
> 1つ教えて下さい。
>
> VB2005にてアプリケーションを作成しています。
>
> アプリを終了するのに
> Buttonをクリックしたら、終了しますか?と
> メッセージボックスを表示しOKなら Me.Close()します。
> そのためButton_Clickイベントの上記内容を記述しました。
>
> 同様にForm右上のXのボタンでも
> 同じようなことをしたいのですが可能でしょうか?
>
もし、やりたいことと違ったらごめんなさい。
これだと右上のXボタンを押したらメッセージボックスが出てきて終了しますけど?。
どうですか?。

Private Sub Form1_Closing(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing
Dim Answer As MsgBoxResult
Answer = MsgBox("終了しますか?", MsgBoxStyle.YesNo)
If Answer = MsgBoxResult.No Then
e.Cancel = True
End If
End Sub
■No20609に返信(のんき君さんの記事)
> ■No20591に返信(WONさんの記事)
のんき君さんありがとうございます。

そうです、やりとりしているうちに
右上のボタンでは終了できないという方向になってしまいました。


ご返答にありましたようにメッセージが表示されればokなのです。

明日、早速検証します。
> そうです、やりとりしているうちに
> 右上のボタンでは終了できないという方向になってしまいました。

と、おっしゃいますが、

> 同様にForm右上のXのボタンでも
> 同じようなことをしたいのですが可能でしょうか?

> メッセージが表示されればokなのです。

これからは「とにかく閉じられようとした際に確認したい」と受け取れます。

> If bln = False Then
> e.Cancel = True
>   メッセージ「閉じるボタンでは終了できません」
> End If

> でも両方
> Case CloseReason.UserClosing
> Debug.WriteLine("ユーザーインターフェイスによる")
> になってしまいます。

これからは、「直接Xボタンでは閉じさせたくない」と受け取れます。

いったいどっちなんでしょう?
#私は後者に反応しました。
■No20611に返信(まどかさんの記事)

まどかさん、すいません。

右上のXでは、確認メッセージが表示されればよいかな
と思いますが、みなさんの作成されているアプリは
どうなのでしょうか?
> 右上のXでは、確認メッセージが表示されればよいかな
> と思いますが、みなさんの作成されているアプリは
> どうなのでしょうか?

通常は「キャンセル」の意味と同意で使用されます。
「本当に閉じますか?」や「保存しますか?」などの表示は、必要があればというところです。

で、前投稿でお聞きしたことはWONさんが実現しようとしておられる仕様ですので
こちらからお聞きした次第です。
それが前者であれば、今まで皆さんがご回答されたとおり
FormClosingイベントで表示をおこなえばよいと思います。
また、デザインしたボタンが押されたかどうかは既出のとおりBooleanフラグ等で判断するしかありません。
#VB6ではXボタンかコードかを判断できたんですけどねぇ。
■No20616に返信(まどかさんの記事)
 まどかさん
最後までありがとうございます。

右上の閉じるは、使用可能にしようかと思います。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板