4 回答

TA貢獻(xiàn)1878條經(jīng)驗(yàn) 獲得超4個(gè)贊
您可以處理以下事件: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貢獻(xiàn)1841條經(jīng)驗(yàn) 獲得超3個(gè)贊
最簡(jiǎn)單的方法是將代碼從 移動(dòng)到事件處理程序 。但是,如果由于您可能希望對(duì)不同的任務(wù)使用相同的窗體,因此這不是放置代碼的好地方,則可以為事件添加一個(gè)處理程序,該處理程序在窗體關(guān)閉并運(yùn)行代碼后調(diào)用,例如: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貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超5個(gè)贊
您可以使用綁定到 TaskCompletionSource 的異步事件處理程序,該處理程序偵聽(tīng)并等待表單的關(guān)閉
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
在表單中,單擊按鈕時(shí),您需要做的就是設(shè)置對(duì)話(huà)框結(jié)果并關(guān)閉表單。
public partial class MyForm: XtraForm {
//...
private void OkClick(object sender, EventArgs e) {
// do some stuff 2
// ...
DialogResult = DialogResult.Ok;
Cose();
}
}

TA貢獻(xiàn)1847條經(jīng)驗(yàn) 獲得超11個(gè)贊
這對(duì)我有用,所以不知道為什么它不適合你(撓頭)......此窗體有兩個(gè)按鈕,一個(gè)按鈕再次打開(kāi)同一窗體,另一個(gè)按鈕關(guān)閉窗體?!案浮贝绑w將事件添加到“已關(guān)閉”事件。
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 關(guān)注
- 144 瀏覽
添加回答
舉報(bào)