4 回答
TA贡献1878条经验 获得超4个赞
您可以处理以下事件:Form.Closed
MyForm testForm = new MyForm();
testForm.Closed += testForm_Closed;
testForm.Show();
private void testForm_Closed(object sender, EventArgs args)
{
var testForm = (Form)sender;
testForm.Closed -= testForm_Closed;
if (testForm.DialogResult == OK)
// do some stuff 1
}
TA贡献1841条经验 获得超3个赞
最简单的方法是将代码从 移动到事件处理程序 。但是,如果由于您可能希望对不同的任务使用相同的窗体,因此这不是放置代码的好地方,则可以为事件添加一个处理程序,该处理程序在窗体关闭并运行代码后调用,例如:OpenFormOkClickFormClosed
private void OpenForm(object sender, ItemClickEventArgs e)
{
MyForm testForm = new MyForm();
...
testForm.Enabled = true;
testForm.FormClosed += (s, a) => {
var dialogOk = testForm.DialogOK;
if(dialogOk)
{
//do some stuff 1
}
};
testForm.Show(this);
}
TA贡献1802条经验 获得超5个赞
您可以使用绑定到 TaskCompletionSource 的异步事件处理程序,该处理程序侦听并等待表单的关闭
private asyc void OpenForm(object sender, ItemClickEventArgs e) {
var source = new TaskCompletionSource<DialogResult>();
EventHandler handler = null;
handler = (s, args) => {
var form = (MyForm)s;
form.FormClosed -= handler;
source.SetResult(form.DialogResult);
}
var testForm = new MyForm();
testForm.FormClosed += handler; //subscribe
//...
testForm.Enabled = true;
testForm.Show();
var dialogOk = await source.Task;
if(dialogOk == DialogResult.Ok) {
//do some stuff 1
}
}
这样,您就可以将逻辑保留在 中,并允许代码在不阻塞的情况下等待。OpenForm
在表单中,单击按钮时,您需要做的就是设置对话框结果并关闭表单。
public partial class MyForm: XtraForm {
//...
private void OkClick(object sender, EventArgs e) {
// do some stuff 2
// ...
DialogResult = DialogResult.Ok;
Cose();
}
}
TA贡献1847条经验 获得超11个赞
这对我有用,所以不知道为什么它不适合你(挠头)......此窗体有两个按钮,一个按钮再次打开同一窗体,另一个按钮关闭窗体。“父”窗体将事件添加到“已关闭”事件。
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Form1 test = new Form1();
test.FormClosed += Test_FormClosed;
test.Show();
}
private void Test_FormClosed(object sender, FormClosedEventArgs e)
{
MessageBox.Show("closed -- do something else here!");
}
private void button2_Click(object sender, EventArgs e)
{
Close();
}
}
- 4 回答
- 0 关注
- 110 浏览
添加回答
举报