- PR -

'閉じる'のキャンセル

1
投稿者投稿内容
mikan
ベテラン
会議室デビュー日: 2002/08/19
投稿数: 58
投稿日時: 2003-03-06 17:03
こんにちわ、みかん@C#でWindowsアプリケーション作成中 です。

'閉じるボタン'クリック時に終了させず、最小化させたいと考えています。
現在、Form1_Closing()にて
this.WindowState = FormWindowState.Minimized;
e.Cancel = true;
としています。
アプリケーションの終了(タスクトレイアイコンのコンテキストメニューにある)のときには、Closingが発生しない Application.Exit() を呼んでいます。

しかしこの方法だと、ログオフやWindowsの終了のときにもキャンセルされてしまい、うまく終了してくれないようです。
タスクバーで右クリック→「閉じる(C) Alt+F4」でも同様ですが、これはそもそも閉じるボタンと同じなんでしたっけ。

VB6のときには、
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
  If UnloadMode = vbFormControlMenu Then
    Cancel = Not 0
  End If
End Sub
のように回避していたのですが、Closingが呼び出された理由(UnloadModeみたいな情報)は受け取っていないのでしょうか?
「ローカル」ウインドウで sender を眺めてみましたが、違いには気付きませんでした。

Googleあたりでいろいろ探してみたんですが、いい情報には出会えませんでした。

or すっごく見当違いしてる??
Tog
ベテラン
会議室デビュー日: 2002/06/09
投稿数: 76
投稿日時: 2003-03-06 18:06
WndProcのオーバーライドでしょうか。
以前同じような事をしました。

Alt+F4は閉じるボタンと同じですね。
閉じたいときは
Me.Close
で閉じます。

コード:
Public Const SC_CLOSE As Integer = 61536
Public Const WM_SYSCOMMAND As Integer = 274

Protected Overloads Overrides Sub WndProc(ByRef m As Message)

            If m.Msg = WM_SYSCOMMAND AndAlso m.WParam.ToInt32 = SC_CLOSE Then
                Me.WindowState = FormWindowState.Minimized
                Return
            End If
            MyBase.WndProc(m)
End Sub

mikan
ベテラン
会議室デビュー日: 2002/08/19
投稿数: 58
投稿日時: 2003-03-06 18:51
ありがとうございます。
思い通りの動きになりました。


VB→C#の移植って、貼り付けて書き換えるより書き直すほうが早そう。。。
微妙にもどかしいし。
コード量にも次第でしょうけど。
1

スキルアップ/キャリアアップ(JOB@IT)