6

winforms アプリケーションでフォーム ウィンドウを閉じたときに、ユーザーにデータを保存するように求めています。フォームの右上隅にある赤いボックスをクリックすると、ユーザーにプロンプ​​トを表示する方法がわかりません。

私のアプリケーションには現在、ブール値のフラグがあり、textchanged イベントで True に設定されています。したがって、赤いボックスによってトリガーされるイベントのブール値を確認するだけで済みます。

何かアドバイス?

4

4 に答える 4

14

FormClosingイベントを処理する必要があります。このイベントは、ユーザーがタイトル バーの [X] ボタンをクリックしたか、その他の手段でフォームが閉じられる直前に発生します。

フォームが閉じられる前にイベントが発生するため、close イベントをキャンセルする機会が提供されます。FormClosingEventArgsパラメータでクラスのインスタンスが渡されeます。e.Cancelプロパティを True に設定すると、保留中のクローズ イベントをキャンセルできます。

例えば:

Private Sub Form_Closing(ByVal sender As Object, ByVal e As FormClosingEventArgs)
    If Not isDataSaved Then
        ' The user has unsaved data, so prompt to save
        Dim retVal As DialogResult
        retVal = MessageBox.Show("Save Changes?", YesNoCancel)
        If retVal = DialogResult.Yes Then
            ' They chose to save, so save the changes
            ' ...
        ElseIf retVal = DialogResult.Cancel Then
            ' They chose to cancel, so cancel the form closing
            e.Cancel = True
        End If
        ' (Otherwise, we just fall through and let the form continue closing)
    End If
End Sub
于 2011-01-31T13:11:55.700 に答える
5

フォームのOnFormClosingメソッドをオーバーライドすると、変更が行われたことをユーザーに通知する機会があり、フォームを閉じるのをキャンセルする機会があります。

このイベントは、 CloseReasonプロパティ (フォームが閉じている理由を示す) を持つFormClosingEventArgsインスタンスと、フォームが閉じないように True に設定できる Cancel プロパティを提供します。

于 2011-01-31T13:11:58.430 に答える
5

このコードをC#の希望に実装するので、役に立ちます

protected override void OnFormClosing(FormClosingEventArgs e)
            {            
                base.OnFormClosing(e);
                if (PreClosingConfirmation() == System.Windows.Forms.DialogResult.Yes)
                {
                    Dispose(true);
                    Application.Exit();
                }
                else
                {
                    e.Cancel = true;
                }
            }

        private DialogResult PreClosingConfirmation()
        {
            DialogResult res = System.Windows.Forms.MessageBox.Show(" Do you want to quit?          ", "Quit...", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
            return res;
        }
于 2013-02-21T07:58:13.237 に答える
0

FormClosingイベントが必要です

于 2011-01-31T13:12:30.640 に答える