当一个窗体加载时,如何将焦点放在文本框上?

186

我在我的C#程序中有一个TextBox。当程序启动时,我需要焦点放在这个TextBox上。

我尝试在Form_Load事件中使用以下代码:

MyTextBox.Focus();

但它并不起作用。

当表单加载时,我该如何将焦点放在这里?

16个回答

401

设置表单的ActiveControl属性,然后你就可以了。

this.ActiveControl = yourtextboxname;

2
我尝试了这个对于 ComboBox。但它也不起作用! - Ghasem
1
谢谢,这个方法对我很有效,其他的都不行。不确定为什么TabIndex = 0不起作用,但可能是在加载表单/显示对话框时存在奇怪的操作顺序。 - David Carrigan
1
尝试这个 >>> this.ActiveControl = yourtextboxname.Control; - Polamin Singhasuwich
3
这很有效,但为什么 MyTextBox.Focus(); 没有起作用 - 在程序运行后它似乎表现良好。 - Levon
3
写下this.ActiveControl = textBox1;。大家都了解"textBox1"的含义。"youttextboxname"听起来像是... = "MyTextBox"; - Bitterblue
显示剩余2条评论

28

如果控件还没有被渲染,你无法将焦点设置到它。Form.Load() 的执行在控件被渲染之前。

前往窗体的事件并双击“Shown”事件。在窗体的shown事件处理程序中调用control.Focus()方法。

    private void myForm_Shown(object sender, EventArgs e)
    {
        // Call textbox's focus method
        txtMyTextbox.Focus();
    }

25

请检查您的选项卡顺序,确保文本框设置为零。


将tabindex设置为表单中第一个可聚焦元素,以便使其成为光标的“焦点”。 - apincik

15

你可以尝试:

MyTextBox.Select();

根据文档:
选择方法会激活控件,如果控件的可选择样式位在ControlStyles中设置为true,它包含在另一个控件中,并且所有父控件都是可见和启用的。
您可以首先检查控件是否可选择,检查 MyTextBox.CanSelect 属性。

13

8
你无法让它工作的原因是因为Load事件在表单绘制或渲染之前被调用。这就像告诉一个披萨店如何制作你的披萨,然后要求他们在制作之前给你发送一张披萨上有多少意大利辣肠的图片一样。
using System;
using System.Windows.Forms;

namespace Testing
{
    public partial class TestForm : Form
    {
        public TestForm()
        {
            InitializeComponent();

            Load += TestForm_Load;

            VisibleChanged += TestForm_VisibleChanged;

            Shown += TestForm_Shown;

            Show();

        }

        private void TestForm_Load(object sender, EventArgs e)
        {
            MessageBox.Show("This event is called before the form is rendered.");
        }

        private void TestForm_VisibleChanged(object sender, EventArgs e)
        {
            MessageBox.Show("This event is called before the form is rendered.");
        }

        private void TestForm_Shown(object sender, EventArgs e)
        {
            MessageBox.Show("This event is called after the form is rendered.");
            txtFirstName.Focus();
        }
    }
}

7

Textbox.Focus() 尝试将焦点设置在文本框元素上。例如,如果元素可见性为隐藏,则 Focus() 不起作用。因此,在调用 Focus() 之前,请确保您的元素是可见的。


5

我通过更改文本框的“TabIndex”属性解决了我的问题。当程序启动时,我将要聚焦的文本框的TabIndex设置为0。


4
使用表单显示事件和设置。
MyTextBox.Focus();

表单加载时无法工作。 - Ray Chakrit

4

将 Tab Index 属性的值设置为 0,然后在表单加载函数中编写:

YourTextboxName.Focus();

它会正常工作。


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