关闭窗体后启用按钮
Enable a button after closing a form
我想在第二个表单关闭时启用主表单中的按钮。我读过一些关于调用的书,但不是很懂。
我怎样才能做到这一点?
关闭第二个表单时,将自动引发其FormClosed
事件。在引发事件之前,可以将事件处理程序注册到事件。这使您能够编写在事件发生时自动执行的代码。
在。net中注册事件处理程序是通过向事件添加委托实例来实现的。委托是描述方法签名的类型。如果使用gcnew实例化委托,则将其与代码中的函数关联。您可以自己调用委托(这里不需要),或者您可以将它传递给其他代码,然后这些代码可以调用它。后一个用于事件。
对于您的情况,这意味着:
- 查看
FormClosed
事件的委托类型。它是定义为delegate void FormClosedEventHandler(Object^ sender, FormClosedEventArgs^ e)
的FormClosedEventHandler。 - 这意味着你必须实现一个不返回任何东西(void)并接受两个参数的方法:System::Object和System::Windows::Forms::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;
}
相关文章:
- 编译时未启用intel oneApi CUDA支持
- 问:如何使用C++中的按钮从窗口打开窗口
- 如何将点击的信号和插槽添加到qt中的自定义按钮中
- QML按钮点击功能执行顺序
- 当用户超过按钮点击限制时报告
- OpenGL在启用深度测试时不会丢弃我的碎片
- Visual C++GC接口如何启用它以及要包含哪个库
- 函数计算用户按下按钮的频率
- 热键/按钮,根据需要进行编译,但不运行(在F5和Ctrl+Shift+B之间)
- FLTK:按下哪个按钮 - 将数字传递给按钮的回调 (lambda)
- 如何在自定义类中启用'auto loops'?
- 如何通过按下第三个窗口中的按钮,将QString从一个窗口获取到另一个窗口
- 垂直方向的 Gtk3+ 旋转按钮 (c/c++)
- 通过MQL4在MT4中启用趋势线绘制按钮
- 根据特定条件,禁用/启用QfileDialog的按钮
- 按钮的巨大"Grid"严重滞后,按钮无法启用
- 嵌入窗格时启用禁用CMFCToolBar按钮
- 启用win32消息框中的关闭按钮
- 关闭窗体后启用按钮
- 只有在填充了两个字段时才启用按钮