标签: formclosing

等待FormClosing事件中的异步函数

我有一个问题,我不能等待FormClosing事件内的异步函数,这将确定表单关闭是否应继续.我创建了一个简单的示例,如果您关闭而不保存,则会提示您保存未保存的更改(非常类似于记事本或微软词).我遇到的问题是,当我等待异步保存功能时,它会在保存功能完成之前关闭表单,然后在完成后返回结束功能并尝试继续.我唯一的解决方案是在调用SaveAsync之前取消关闭事件,然后如果保存成功,它将调用form.Close()函数.我希望有一种更清洁的方式来处理这种情况.

要复制方案,请创建一个带有文本框(txtValue),复选框(cbFail)和按钮(btnSave)的表单.这是表单的代码.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace TestZ
{
public partial class Form1 : Form
{

    string cleanValue = "";

    public Form1()
    {
        InitializeComponent();
    }

    public bool HasChanges()
    {
        return (txtValue.Text != cleanValue);
    }

    public void ResetChangeState()
    {
        cleanValue = txtValue.Text;
    }

    private async void btnSave_Click(object sender, EventArgs e)
    {
        //Save without immediate concern of the result
        await SaveAsync();
    }

    private async Task<bool> SaveAsync()
    {
        this.Cursor …
Run Code Online (Sandbox Code Playgroud)

c# formclosing async-await .net-4.5

30
推荐指数
1
解决办法
8595
查看次数

如何防止表单对象在关闭时处理?

我正在使用MDIParent表格.当我关闭它的孩子时,孩子的对象处理.有没有办法将子可见性设置为false而不是处置?

c# dispose winforms formclosing

17
推荐指数
1
解决办法
3万
查看次数

获取应用程序结束事件

如何进入申请结束活动?

我想让应用程序保存所有未保存的操作或向用户显示消息"你确定关闭而不保存所有数据吗?" 这样的事情.

如果这将有所帮助 - 该应用程序是SingleFrameAplication使用Swing.

java swing netbeans jsr296 formclosing

13
推荐指数
1
解决办法
2万
查看次数

如何在C#中关闭表单

好吧,所以Windows窗体类,WindowSettings和窗体都有一个"取消"按钮.当用户单击该按钮时,将弹出对话框DialogSettingsCancel并询问用户他是否确定要执行该操作.该对话框有2个按钮,"是"按钮和"否"按钮.如果用户单击"是"按钮,我想要关闭DialogSettingsCancel和WindowSettings.

我在DialogSettingsCancel中的button_Click事件处理程序:

private void button1_Click(object sender, EventArgs e)
{
    //Code to trigger when the "Yes"-button is pressed.
    WindowSettings settings = new WindowSettings();
    this.Close();
    settings.Close();
}
Run Code Online (Sandbox Code Playgroud)

当我运行我的应用程序,并转到设置窗体,然后单击"取消"按钮,然后单击"是" - 按钮,只关闭DialogSettingsCancel而不关闭WindowSettings.

为什么它不起作用?

我也试过改变

this.Close();
settings.Close();
Run Code Online (Sandbox Code Playgroud)

settings.Close();
this.Close();
Run Code Online (Sandbox Code Playgroud)

但结果仍然相同.

c# button winforms formclosing

12
推荐指数
3
解决办法
13万
查看次数

在封闭事件中的"e.Cancel"

使用该FormClosing事件时,为什么代码e.Cancel = true;有效,但new CancelEventArgs().Cancel = true;不起作用?

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
    e.Cancel = true;

    new CancelEventArgs().Cancel = true;
}
Run Code Online (Sandbox Code Playgroud)

.net c# events formclosing

11
推荐指数
3
解决办法
4万
查看次数

VB.NET:Abort FormClosing()

我有一个代码片段,我想在应用程序关闭时运行.所以,我用FormCLosing事件.但现在我想发出一条退出确认信息.例如,如果用户单击"退出"(X)按钮,则会出现提示,如果他单击"否",则应用程序将不会关闭并恢复到之前的状态.

现在我发现使用FormClosing事件很难实现.因为无论用户点击什么按钮,它都会被执行.对此有任何补救措施吗?

我的意思是,我需要一个像ExitButtonPressed()...

vb.net formclosing

8
推荐指数
1
解决办法
4万
查看次数

表单关闭时的MessageBox

我在关闭应用程序之前使用此代码进行提问,但它无法正常工作.
我的代码如下.

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
   DialogResult dlgresult = MessageBox.Show("Exit or no?",
                               "My First Application",
                               MessageBoxButtons.YesNo,
                               MessageBoxIcon.Information);
   if (dlgresult == DialogResult.No)
   {
      e.Cancel = true;

   }
   else
   {
     Application.Exit();
   }
}
Run Code Online (Sandbox Code Playgroud)

c# formclosing

7
推荐指数
1
解决办法
3万
查看次数

C#MDI父级检测MDI Child何时关闭?

我试图在MDI父级上检测到我的MDI子窗体何时关闭,并做出相应的反应.在MDI子女关闭之前,MDI家长不应做任何事情.这是我的代码,我不确定我做错了什么,但我添加的表单关闭事件方法永远不会被调用...

如果不明显,则以下代码位于MDI父类中.

    private void keyValidation()
    {
        if (Properties.Settings.Default.Unlock == true)
            return;
        else
        {
            menu.Enabled = false;
            statusStrip.Enabled = false;

            ValidationForm vf = new ValidationForm();
            vf.MdiParent = this;
            vf.Show();
            vf.FormClosed += new FormClosedEventHandler(validationForm_FormClosed);
        }
    }

    void validationForm_FormClosed(object sender, FormClosedEventArgs e)
    {
        MessageBox.Show("Got here");
        if (Properties.Settings.Default.Unlock == true)
        {
            menu.Enabled = true;
            statusStrip.Enabled = true;
        }
    }
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助!

c# mdi mdiparent mdichild formclosing

6
推荐指数
1
解决办法
1万
查看次数

winforms应用程序中的窗口关闭事件

我希望提示用户在winforms应用程序中关闭窗体窗口时保存数据.如果单击表单右上角的红色框,我无法弄清楚如何触发用户提示.

我的应用程序当前有一个布尔标志,在textchanged事件上设置为True.因此,我只需要检查红色框触发的任何事件中的布尔值.

有什么建议?

.net vb.net winforms formclosing

5
推荐指数
3
解决办法
1万
查看次数

Vb.net中的Application.Exit()和FormClosing事件

我有一个在系统托盘图标中运行的Windows窗体应用程序.如果用户按下窗口的X按钮,将显示一个消息框,显示是和否(是 - >关闭窗体---否 - >保持窗体运行在系统托盘图标).我正在考虑在用户打开另一个应用程序实例时阻止该场景,因为我已经运行了一个实例,所以我使用了这段代码:

 If Process.GetProcessesByName(Process.GetCurrentProcess.ProcessName).Length> 1 Then 
 MessageBox.Show("Another instance is running", "Error Window", MessageBoxButtons.OK,
    MessageBoxIcon.Exclamation)
    Application.Exit()
End If
Run Code Online (Sandbox Code Playgroud)

问题是,当我想测试这个消息时,但是在我按下确定后,会出现一个新的消息框(来自Private Sub Form_FormClosing的消息框).如果我选​​择NO,我将不得不运行实例!我已经读过Application.Exit会触发Form_FormClosing事件.

是否有可能取消触发Form_FormClosing事件,或者我做错了什么?

'这是封闭程序

Private Sub Form_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
    Try
        Dim response As MsgBoxResult
        response = MsgBox("Are you sure you want to exit", CType(MsgBoxStyle.Question + MsgBoxStyle.YesNo, MsgBoxStyle), "Confirm")

        'If the user press Yes the application wil close
        'because the application remains in taskmanager after closing i decide to kill the current process …
Run Code Online (Sandbox Code Playgroud)

vb.net formclosing

5
推荐指数
1
解决办法
6万
查看次数