0
A
回答
1
當您關閉第二個窗體時,它的FormClosed
事件會自動引發。在事件發生之前,您可以向事件註冊事件處理程序。這使您可以編寫在事件發生時自動執行的代碼。
在.NET中註冊事件處理程序是通過向事件添加委託實例來實現的。委託是描述方法簽名的類型。如果你用gcnew實例化一個委託,你可以將它與代碼中的函數關聯起來。你可以自己調用委託(這裏不需要),也可以將它傳遞給其他代碼,然後調用它。後者用於事件。
對於你的情況,這意味着:
- 看那
FormClosed
事件的委託類型。這是它被定義爲delegate void FormClosedEventHandler(Object^ sender, FormClosedEventArgs^ e)
- 這意味着你必須實現一個方法返回什麼(無效),並接受兩個參數的FormClosedEventHandler:系統::對象和系統:視窗:形式:FormClosedEventArgs
- 實例化FormClosedEventHandler委託並將其與您的方法關聯
- 註冊到第二個表單上的
FormClosed
事件,並啓用事件處理程序中的按鈕。
一個例子:
ref class MainForm
{
...
// event handler function (compatible to the FormClosedEventHandler delegate)
void OnSecondFormClosed(Object^ sender, FormClosedEventArgs^ e)
{
myButton->Enabled = true;
}
void DoSomethingWithSecondForm(Form^ secondForm)
{
// get a disabled Button
myButton->Enabled = false;
// create an event handler by instantiating a delegate
FormClosedEventHandler^ handler = gcnew FormClosedEventHandler(this, &MainForm::OnSecondFormClosed);
// register event handler
secondForm->FormClosed += handler;
}
...
}
(我沒編譯代碼,但是這是它是如何工作一般)
當在同一個線程內創建兩種參與形式,有是不需要做一些額外的Invoke
。否則,您必須將更改的控件放入創建控件的同一個線程中。您可以通過將代表傳遞給Control::Invoke
或Control::BeginInvoke
來實現此目的。
// event handler function (compatible to the FormClosedEventHandler delegate)
void OnSecondFormClosed(Object^ sender, FormClosedEventArgs^ e)
{
if (myButton->InvokeRequired)
{
// create a delegate to call the same event handler again
FormClosedEventHandler^ handler = gcnew FormClosedEventHandler(this, &MainForm::OnSecondFormClosed);
// BeginInvoke causes the delegate to be called asynchronously from the UI thread
myButton->BeginInvoke(handler, sender, e);
// nothing to be done here, the actual work happens when the delegate is actually called
return;
}
myButton->Enabled = true;
}
相關問題
- 1. 打開其他表單後禁用按鈕,然後在關閉其他表單後啓用該按鈕
- 2. 在UIWebView中啓用關閉按鈕
- 3. jCarouselLite開啓/關閉按鈕
- 4. 模態表單中的關閉按鈕
- 5. 關閉.showDialog()表單後啓用/禁用MDiParent表單
- 6. 關閉按鈕不關閉表格
- 7. 如何在單擊C#上的按鈕後關閉表單應用程序
- 8. 啓用日曆後,Next/Prev按鈕關閉
- 9. 後退按鈕關閉應用程序
- 10. 用按鈕單擊關閉JFrame
- 11. 應用程序關閉按鈕單擊
- 12. App Force在按鈕單擊時關閉
- 13. Arduino按鈕開啓和關閉功能
- 14. SimpleModal - 用關閉按鈕關閉iframe
- 15. 如何在單擊停止按鈕後啓用開始按鈕
- 16. 如何在選擇單選按鈕後啓用提交按鈕?
- 17. 單擊按鈕後,如何啓用/激活單選按鈕?
- 18. Photoswipe /使用關閉按鈕作爲歷史後退按鈕
- 19. 在文件菜單中隱藏/關閉關閉按鈕
- 20. 在關閉AlertDialog後獲取單選按鈕狀態
- 21. 如何在按鈕單擊後關閉彈出窗口模式
- 22. 單擊另一個按鈕並提交表單後啓用按鈕
- 23. 單選按鈕啓用表單域
- 24. 如何在進程退出後啓用表單按鈕?
- 25. 使用單選按鈕在應用程序中開啓/關閉聲音
- 26. DockPanel禁用關閉按鈕
- 27. Form.GotFocus禁用關閉按鈕
- 28. 用關閉按鈕Slidetoggle - jQuery
- 29. 當關閉按鈕被禁用時關閉表格程序
- 30. Android WebApp部隊關閉後退按鈕
謝謝!但是我沒有把它弄得很好,對不起。我不需要調用,我可以看到,但是如何創建'OnSecondFormClosed'函數?它怎麼叫?我應該在通過腳本關閉第二個窗體時調用它?或者有一種方法可以「自動」調用它? – 2013-03-18 09:21:06
是的,對不起,我以前的問題很簡單...但是,當我打算使用第二種形式時,我應該調用「DoSomethingWithSecondForm」嗎?我不能讓它工作 – 2013-03-18 09:46:41
實現它,謝謝 – 2013-03-18 09:48:27