173

我在我的 C# 程序文本框中

我需要在程序启动时将焦点放在文本框上

我在 Form_Load 上试试这个:

MyTextBox.Focus();

但它不会工作

4

16 回答 16

381

设置ActiveControl表单的属性,你应该没问题。

this.ActiveControl = yourtextboxname;
于 2011-07-06T13:36:27.720 回答
25

检查您的标签顺序并确保文本框设置为零

于 2011-07-06T13:32:15.867 回答
22

如果控件尚未呈现,则无法将焦点设置为控件。Form.Load() 在呈现控件之前发生。

转到表单的事件并双击“显示”事件。在表单显示的事件处理程序中调用 control.Focus() 方法。

    private void myForm_Shown(object sender, EventArgs e)
    {
        // Call textbox's focus method
        txtMyTextbox.Focus();
    }
于 2017-03-31T03:02:21.557 回答
15

你可以试试:

MyTextBox.Select();

根据文档:

如果控件的 Selectable 样式位在 ControlStyles 中设置为 true,则 Select 方法将激活该控件,它包含在另一个控件中,并且其所有父控件都是可见的和启用的。

您可以首先通过检查MyTextBox.CanSelect属性来检查控件是否可以选择。

于 2011-07-06T13:35:51.707 回答
12

如果您只想在第一次显示表单时设置焦点,请尝试处理Form.Shown事件并在那里执行。否则使用Control.VisibleChanged

于 2011-07-06T13:36:36.583 回答
7

您无法使其工作的原因是因为在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();
        }
    }
}
于 2016-08-20T14:08:37.990 回答
6

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

于 2013-03-15T19:56:46.307 回答
5

我通过更改 TextBox 的“TabIndex”属性解决了我的问题。我为 TextBox 设置了 0,我想在程序启动时将其集中在 Form 上。

于 2016-10-04T19:33:29.033 回答
4

使用表单显示的事件并设置

MyTextBox.Focus();
于 2015-10-09T17:41:52.427 回答
4

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

YourTextboxName.Focus();

它会起作用的。

于 2018-09-11T06:57:00.270 回答
2

您可以在文本框设置中使用其中一个textBox1.select();TabIndexTabIndex=0首先专注。

于 2018-01-21T20:03:53.323 回答
1

将 Tabstop 设置为 True 并将 TabIndex 设置为您需要关注的控件的最小值。

例如,如果您有 2 个文本框:TextBox1 和 TextBox2,请将两者的 Tabstop 设置为 True,将 TabIndex 分别设置为 0 和 1。加载表单时,焦点将位于 TextBox1 上,按“Tab”键时,焦点将移至 TextBox2。

于 2018-06-18T02:44:34.723 回答
1

最后,我发现了我使用 Metro 框架的问题,您的所有解决方案都不适用于 MetroTextBox,并且您的所有解决方案都可以在 load、show、visibility_change、events 中使用普通的 textBox,即使选项卡索引 = 0 也是有效的。

   // private void Form1_VisibleChanged(object sender, EventArgs e)
   // private void Form1__Shown(object sender, EventArgs e)
    private void Form1_Load(object sender, EventArgs e)
    {

        textBox1.Select();
        this.ActiveControl=textBox1;
        textBox1.Focus();
    }
于 2020-06-06T11:30:09.683 回答
0

它对我有用,将 tabindex 设置为 0 this.yourtextbox.TabIndex = 0;

于 2016-12-01T06:47:31.290 回答
0

在您的表单上,转到属性并确保“TopMost”属性设置为 true,这将解决您的问题。

于 2019-09-04T07:56:37.993 回答
-5

在 jquery 中设置焦点

$(function() {
  $("#txtBox1").focus();
});

或者在Javascript中你可以做

window.onload = function() {
  document.getElementById("txtBox1").focus();
};
于 2016-12-01T10:30:39.670 回答