关闭对话框后无法将焦点放在任何控件上

时间:2019-06-04 09:10:21

标签: c# winforms

我正在对话框中显示一些数据库记录。当我单击任何特定记录时,该记录将填入Active Form。
但是我想在对话框关闭时将重点放在按钮上。因此,我在关闭表单时编写了以下代码。

private void frmDG_RecordSelection_FormClosing(object sender, FormClosingEventArgs e)
{
    RecordSelectionStatus.Text = "False";
    Form TargetForm = Home.ActiveMdiChild;

    Button SelectRefConsultant = (Button)TargetForm.Controls.Find("btnSelectRefConsultant_NI", true).SingleOrDefault();
    SelectRefConsultant.Focus();
    TargetForm.ActiveControl = SelectRefConsultant;                                       
}

但是它不起作用。焦点仍然保持在原先的位置。我想念什么?

2 个答案:

答案 0 :(得分:1)

我假设对话框是有模式的...调用FormClosing之后,不要在ShowDialog()中执行此操作。如果不是,请尝试使用FormClosed事件。

我认为您的代码无法正常工作,因为Form关闭时,它仍然具有模式焦点。

答案 1 :(得分:0)

如果frmDG_RecordSelection也是MDIChild,则Home.ActiveMDIChild是这种形式。那已经关闭了。

但是,如果frmDG只是一个对话框,问题就不一样了。

此对话框正在关闭。但是它仍然可见。您不能将焦点设置为不可见的控件。 因此,在此frmDG完全关闭且不可见之后,您将必须设置焦点。更具体地说,当您的MDI表单可见时。

通过MDI表单执行此操作要容易得多。我不知道您是如何编程的,但是我想是这样的:

//this is in your MDI form
void OnRecordSelected(...)
{
    frmDG yourDialog = new frmDG();
    frmDG.ShowModal();

    frmDG.Dispose();
}

在这种情况下,您必须在处理好frmDG之后设置焦点。