为什么在用户从Form.ShowDialog()返回后MDI子节点没有获得焦点?
本文关键字:子节点 MDI 焦点 返回 用户 Form ShowDialog 为什么 | 更新日期: 2023-09-27 17:53:52
我有一个打开并显示dataGridView
的MDI子表单(FormA)。
用户可以通过打开MDI之外的另一个表单(FormB)来更改数据库中的记录。意思是用FormB.ShowDialog()
而不是FormB.Show().
来调用
FormA有一个激活事件,我想在用户从FormB返回时抛出该事件。我这样做是为了刷新datagridview的数据源。
似乎FormA永远不会失去焦点,我需要这样做,以便在用户返回时抛出激活的事件。这是故意的吗?如何实现此功能?
编辑
FormB是从FormA的MDI父类调用的。而不是FormA本身
为什么需要Activated
事件?FormB.ShowDialog()
以模态状态打开FormB
,因此调用形式FormA
的代码的执行被中断。
请参阅示例(在FormA
中使用):
using (FormB frm = new FormB())
if (frm.ShowDialog(this) == DialogResult.OK)
{
// here FormB is closed by user.
}
编辑
由于FormB
是从MDI父进程打开的,因此可以将当前活动的表单保存为变量,然后将执行传递给它。在MDI父表单中试试:
FormA saveForm = ActiveMdiChild as FormA;
using (FormB frm = new FormB())
if (frm.ShowDialog(this) == DialogResult.OK)
{
if (saveForm != null)
saveForm.UpdateDataGridView(); // Call the method of a previously active form.
}
您也可以尝试ActivateMdiChild
方法来激活子表单