在 c# 中发生来自另一个类的事件后执行代码的最佳方法
本文关键字:事件 执行 代码 方法 最佳 另一个 | 更新日期: 2023-09-27 18:35:14
假设我们有form A
有一个按钮"运行向导"。单击此按钮将打开一个向导以创建某些内容。此向导是从另一个项目导入的,该项目形成 A 引用。向导在其工作期间会创建多个数组。
这是单击按钮的代码:
private void buttonOpenWizard_Click(object sender, EventArgs e)
{
SampleWizard wizard = new SampleWizard();
wizard.Show();
//(theoretical code using arrays created by the wizard)
}
等待向导完成,并在完成向导任务后才运行理论代码的最佳方法是什么?
由于您似乎不介意阻止,请使用ShowDialog
:
private void buttonOpenWizard_Click( object sender, EventArgs e )
{
SampleWizard wizard = new SampleWizard();
if( wizard.ShowDialog() == DialogResult.OK ) // this line will block until the wizard form is closed
{
// and any code here will not run until that has happened
}
}
通常,使用ShowDialog
调用的返回值来指示用户是否完成了向导/对话框。在这种情况下,我无法知道该表单是否使用它,但在这里我假设它确实如此。
如果您不想阻止,您应该能够执行以下操作:
private void buttonOpenWizard_Click( object sender, EventArgs e )
{
SampleWizard wizard = new SampleWizard();
wizard.FormClosed += WizardClosed; // hook up event handler
wizard.Show();
}
private void WizardClosed( object sender, FormClosedEventArgs e )
{
var wizard = (SampleWizard)sender;
// check and use result of wizard here
}
private void buttonOpenWizard_Click(object sender, EventArgs e)
{
SampleWizard wizard = new SampleWizard();
if(wizard.ShowDialog()== DialogResult.OK) //Set the dialog result to ok in your form, if it would closed corret
{
//(theoretical code using arrays created by the wizard)
}
}