我有一个问题,我不能等待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) 我正在使用MDIParent表格.当我关闭它的孩子时,孩子的对象处理.有没有办法将子可见性设置为false而不是处置?
如何进入申请结束活动?
我想让应用程序保存所有未保存的操作或向用户显示消息"你确定关闭而不保存所有数据吗?" 这样的事情.
如果这将有所帮助 - 该应用程序是SingleFrameAplication使用Swing.
好吧,所以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)
但结果仍然相同.
使用该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) 我有一个代码片段,我想在应用程序关闭时运行.所以,我用FormCLosing事件.但现在我想发出一条退出确认信息.例如,如果用户单击"退出"(X)按钮,则会出现提示,如果他单击"否",则应用程序将不会关闭并恢复到之前的状态.
现在我发现使用FormClosing事件很难实现.因为无论用户点击什么按钮,它都会被执行.对此有任何补救措施吗?
我的意思是,我需要一个像ExitButtonPressed()...
我在关闭应用程序之前使用此代码进行提问,但它无法正常工作.
我的代码如下.
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) 我试图在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)
谢谢你的帮助!
我希望提示用户在winforms应用程序中关闭窗体窗口时保存数据.如果单击表单右上角的红色框,我无法弄清楚如何触发用户提示.
我的应用程序当前有一个布尔标志,在textchanged事件上设置为True.因此,我只需要检查红色框触发的任何事件中的布尔值.
有什么建议?
我有一个在系统托盘图标中运行的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)