如何从另一个窗体(C#)设置主窗体中对象(文本框)的焦点

3

我尝试了所有我知道的方法。麻烦一定是我的文本框在一个组框中。我有一个主窗体,从中移动到另一个窗体。当我返回到主窗体时,我希望将特定对象聚焦。怎么做呢?

这是我在主窗体中的代码。

    private void button1_Click(object sender, EventArgs e)
    {
         Form1 frm = new Form1();
         frm.ShowDialog();
    }

现在,这是我如何从Form1返回到我的Mainform的方法。
    private void button3_Click(object sender, EventArgs e)
    {
        this.DialogResult = DialogResult.OK;
    }

我在主窗体中有一个textBox1。如何在退出Form1并进入Mainform时将焦点设置为textBox1。我尝试在Mainform的Load,Show,Activated和Enter事件下使用textBox1.Focus(); 和this.ActiveControl = this.textBox1;。但仍然无效。我尝试创建一个公共方法,并在Form1的退出按钮下调用它。像这样。
在Mainform中,
    public void textBox1Focus()
    {
        textBox1.Focus();
    }

然后在Form1中,

    private void button3_Click(object sender, EventArgs e)
    {
        this.DialogResult = DialogResult.OK;
        Mainform frm = new Mainform();
        frm.textBox1Focus();
    }

这仍然没有起作用。我的textBox1在一个groupBox中,这可能是原因吗?

谢谢。

1个回答

7
我不明白你所展示的代码是如何编译通过的。你正在从Form1类中定义的方法内调用textBox1Focus(),我最好的理解是,该类没有包含textBox1Focus的定义。这种方法仅在Mainform类中定义。
并且,将文本框放置在组框中并不会阻止它获得焦点。你的代码还存在其他问题。很难说;我感觉自己看到的是透过百叶窗而非大型落地窗口的日落景象。
无论如何,我怀疑有一个更简单的解决方案。只需在button1_Click方法的末尾设置文本框控件的焦点即可。ShowDialog方法是一种阻塞调用,这意味着直到用户关闭第二个窗体后才会执行下一条代码行。当这种情况发生时,执行将继续进行,并将焦点设置为文本框控件。
请尝试将代码更改为以下内容:
private void button1_Click(object sender, EventArgs e)
{
     Form1 frm = new Form1();
     frm.ShowDialog();
     this.textBox1.Select();
}

是的,你做得很好。你的代码成功地运行了,我非常感激!关于我的代码中的错误,对此我很抱歉。那只是一个小错误。我已经在我的问题中进行了编辑和修复。但是告诉你,我在实际代码中已经正确地完成了它(否则就会显示错误)。尽管如此,这种方法并没有完全奏效。但是你的技巧却起到了作用 :) - nawfal
@nawfal:没问题,很高兴能够帮到你。作为今后的参考,把你的代码复制粘贴到你的问题中会更容易一些。这可以减少可能出现的输错。因为我们看不到上下文,所以调试你的代码已经足够困难了。你不能忽略语法错误,因为通常情况下这些才是真正的问题! - Cody Gray
我并没有复制粘贴我的代码,只是为了让代码看起来更加清晰简洁。但结果却适得其反了;-) - nawfal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接