繁体   English   中英

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

[英]how to put focus on TextBox when the form load?

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

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

我在 Form_Load 上试试这个:

MyTextBox.Focus();

但它不会工作

设置窗体的ActiveControl属性,你应该没问题。

this.ActiveControl = yourtextboxname;

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

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

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

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

你可以试试:

MyTextBox.Select();

根据文档:

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

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

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

您无法使其工作的原因是因为在绘制或呈现表单之前调用了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();
        }
    }
}

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

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

MyTextBox.Focus();

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

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

YourTextboxName.Focus();

它会起作用的。

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

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

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

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

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

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

我喜欢它...谢谢!

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

最后我发现了我使用metro框架的问题,你所有的解决方案都不适用于metroTextBox,你所有的解决方案都可以在加载、显示、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();
    }

在 jquery 设置焦点

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

或者在 Javascript 你可以做

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM