如何从另一种形式(C#)将焦点设置为主窗体中的对象(文本框)

时间:2011-03-27 12:56:34

标签: c# .net winforms focus controls

我尝试了所有我知道的事情。麻烦一定是我的文本框在一个组框中。我有一个Mainform,我可以从中移动到另一个表单。当我返回Mainform时,我想要一个特定的对象被聚焦。这是怎么做到的? 这是我在Mainform中的代码。

    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;
    }

我在Mainform中有textBox1。如何在退出Form1并进入Mainform时将焦点设置为textBox1。我在Mainform textBox1.Focus();this.ActiveControl = this.textBox1;LoadShow事件下尝试了ActivatedEnter。仍然没有奏效。我尝试创建一个公共方法,并在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在一个组框中。这可能是原因吗?

感谢。

1 个答案:

答案 0 :(得分:6)

我不明白你所展示的代码是如何编译的。您从textBox1Focus()类中定义的方法内部调用Form1,我可以理解,该方法不包含textBox1Focus的定义。该方法仅在Mainform类中定义。

并且不,文本框放置在组框中并不会阻止它获得焦点。您的代码还有其他问题。这很难说;我觉得我正在通过百叶帘看日落,而不是通过一个大的画面窗口。

无论如何,我怀疑有一个更简单的解决方案。只需将焦点设置为button1_Click方法末尾的文本框控件即可。 ShowDialog方法是阻塞调用,这意味着在用户关闭第二个表单之后才会继续执行。当发生这种情况时,执行将继续下一行代码,这将把焦点设置为文本框控件。

尝试将代码更改为以下内容:

private void button1_Click(object sender, EventArgs e)
{
     Form1 frm = new Form1();
     frm.ShowDialog();
     this.textBox1.Select();
}
相关问题