加载表单时如何将焦点放在文本框上?

问题描述 投票:0回答:17

我的 C# 程序中有一个

TextBox
。当程序开始时,我需要集中注意力在这个
TextBox
上。

我在 Form_Load 上尝试过这个:

MyTextBox.Focus();

但是不起作用。

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

c# winforms focus setfocus
17个回答
402
投票

设置表单的

ActiveControl
属性就可以了。

this.ActiveControl = yourtextboxname;

30
投票

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

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

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

25
投票

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


15
投票

你可以尝试:

MyTextBox.Select();

根据文档:

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

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


13
投票

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


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
投票

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


4
投票

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

MyTextBox.Focus();

4
投票

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

YourTextboxName.Focus();

它会起作用的。


4
投票

最后我发现了我使用metro框架的问题,你所有的解决方案都不适用于metroTextBox,而你所有的解决方案都将适用于普通的textBox 在 load 、 show 、visibility_change 、events 中,即使选项卡索引 = 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();
    }

2
投票

您可以在文本框设置中使用

textBox1.select();
TabIndex
TabIndex=0
首先集中注意力。


1
投票

将 Tabstop 设置为 True,并将 TabIndex 设置为最小到您需要焦点的控件。

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


0
投票

这对我有用 将选项卡索引设置为 0 this.yourtextbox.TabIndex = 0;


0
投票

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


0
投票

这是加载 C# 表单时将文本框置于焦点的一种简单方法。它与上面的类似,但编码较少。我不记得我第一次找到解决方案的地方,但我已经使用它几年了,感谢他们。

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        this.ActiveControl = txt_PrtrIP;
        txt_PrtrIP.Focus();
    }

-5
投票

在jquery中设置焦点

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

或者在 Javascript 中你可以这样做

window.onload = function() {
  document.getElementById("txtBox1").focus();
};
© www.soinside.com 2019 - 2024. All rights reserved.