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