0

根据标题,在显示 Form2 后,我无法立即选择 Form1 中的控件并将焦点设置到控件。知道为什么下面的代码不起作用吗?

public partial class MainForm : Form
{
     public Form2 frm2;

     ...

     public void ReadThroughContents(int index)
     {
        ...

        if (frm2.IsDisposed || frm2 == null) { frm2 = new Form2(); }
        if (!frm2.Visible) { frm2.Show(); }

        this.listbox1.Focus();
        this.listbox1.Select();

        ...
     }

编辑:为了清楚起见,焦点停留在 Form2 上。但是,我可以通过单击表单手动选择并关注 Form1,但我需要自动完成。

编辑:在 Form2 中,我正在使用该AxAcroPDFLib库。PDF 文件在显示时会加载到 Form2 中。我相信这就是阻止 Form1 获得焦点的原因。我试过不加载 PDF 文件,我可以自动对焦。

干杯。

4

2 回答 2

1

为了清楚起见,重点仍然放在 Form2 上。

发生这种情况是因为Form.Show窃取了焦点。

在将焦点设置到特定控件之前,您可以尝试将焦点带回 Form1。您可以使用Form.Activate来执行此操作:

//...
this.Activate();
this.listbox1.Focus();
//...

如果您想始终显示 Form2 而不会窃取焦点,请查看此问题:显示表单而不窃取焦点?

于 2014-07-31T04:27:24.047 回答
0

感谢上面的@defaultlocale 找到了解决方案!

从这里复制的代码

private void returnFocus(object sender, EventArgs e)
    {
        lstboxItems.Focus();
    }
this.lstboxItems.LostFocus += new System.EventHandler(this.returnFocus);
于 2014-07-31T06:15:48.443 回答