表单加载时如何将焦点放在TextBox上?


156

我的C#程序文本框中有

我需要在程序启动时将焦点放在textBox上

我在Form_Load上尝试:

MyTextBox.Focus();

但它行不通

Answers:


341

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

this.ActiveControl = yourtextboxname;

1
我尝试了这个ComboBox。但这也不起作用!
Alex Jolig 2015年

1
谢谢,这对我有用,而其他所有东西都没有。不知道为什么Tab Index = 0将不起作用,但是在加载表单/显示对话框时可能会有奇怪的操作顺序。
戴维·卡里根

1
尝试>>> this.ActiveControl = yourtextboxname.Control;
Polamin Singhasuwich

3
这很好用,但是为什么MyTextBox.Focus();不起作用-程序运行后似乎很好用。
莱文

2
编写this.ActiveControl = textBox1;每个人都了解“ textBox1”的含义。“ youttextboxname”听起来像... = "MyTextBox";
Bitterblue

25

检查选项卡顺序,并确保文本框设置为零


加工。或者只是tabindex成为表单中的第一个光标“ focusable”元素。
apincik

15

您可以尝试:

MyTextBox.Select();

根据文档:

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

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


15

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

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

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


6

Textbox.Focus()“尝试”以将重点放在文本框元素上。例如,在隐藏元素可见性的情况下,Focus()将不起作用。因此,请在调用之前确保您的元素可见Focus()


5

之所以无法使其正常工作,是因为在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();
        }
    }
}



3

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

YourTextboxName.Focus();

会的。


2

您可以使用textBox1.select();TabIndex的在文本框的设置。TabIndex=0首先关注。


如果我们调用textBox1.select(); 在表单加载事件处理程序中,它将焦点设置在textBox1中。
Tushar R.

1

将Tabstop设置为True,将TabIndex设置为所需焦点所在控件的最小值。

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


1

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



0

最后,我发现我正在使用Metro框架的问题,并且所有解决方案都不能与metroTextBox一起使用,并且所有解决方案都可以与load,show,visible_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();
    }

-5

在jQuery中设置焦点

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

或用Javascript可以

window.onload = function() {
  document.getElementById("txtBox1").focus();
};

4
对于一个网站问题,这可能是一个很好的答案,但这是标记为c#和的winforms
Ben Voigt
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.