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

Posted

技术标签:

【中文标题】表单加载时如何将焦点放在 TextBox 上?【英文标题】:how to put focus on TextBox when the form load? 【发布时间】:2011-09-29 15:28:27 【问题描述】:

我的 C# 程序中有文本框

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

我在 Form_Load 上试试这个:

MyTextBox.Focus();

但它不会工作

【问题讨论】:

【参考方案1】:

最后我发现了我使用 Metro 框架的问题,您的所有解决方案都不适用于 MetroTextBox,而您的所有解决方案都适用于普通文本框 在 load , show , visibility_change ,events 中,即使 tab index = 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】:

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

【讨论】:

【参考方案3】:

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

YourTextboxName.Focus();

它会起作用的。

【讨论】:

【参考方案4】:

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

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

【讨论】:

【参考方案5】:

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

【讨论】:

如果我们调用 textBox1.select();在表单加载事件处理程序中,它将焦点设置在 textBox1 中。【参考方案6】:

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

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

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

【讨论】:

【参考方案7】:

在jquery中设置焦点

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

或者在javascript中你可以这样做

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

【讨论】:

这可能是网站问题的一个很好的答案,但这个问题被标记为c#winforms【参考方案8】:

它对我有用 将标签索引设置为 0 this.yourtextbox.TabIndex = 0;

【讨论】:

【参考方案9】:

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

【讨论】:

【参考方案10】:

你不能让它工作的原因是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();
        
    

【讨论】:

【参考方案11】:

你可以试试:

MyTextBox.Select();

根据文档:

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

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

【讨论】:

【参考方案12】:

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

MyTextBox.Focus();

【讨论】:

【参考方案13】:

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

this.ActiveControl = yourtextboxname;

【讨论】:

我为ComboBox 尝试了这个。但它也不起作用! 感谢这对我有用,而其他一切都没有。不知道为什么 Tab Index = 0 不起作用,但在加载表单/显示对话框时可能会出现奇怪的操作顺序。 试试这个 >>> this.ActiveControl = yourtextboxname.Control; 这很好用,但为什么 MyTextBox.Focus(); 不工作 - 一旦程序运行,它似乎工作正常。 this.ActiveControl = textBox1;大家都明白“textBox1”的意思了。 “youtextboxname”听起来像... = "MyTextBox";【参考方案14】:

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

【讨论】:

【参考方案15】:

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

【讨论】:

【参考方案16】:

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

【讨论】:

工作。或者只是 tabindex 成为表单中第一个光标“可聚焦”元素。

以上是关于表单加载时如何将焦点放在 TextBox 上?的主要内容,如果未能解决你的问题,请参考以下文章

Angular 2在组件加载时将焦点放在表单的第一个字段上

单击ListViewItem时如何将焦点设置在TextBox上?

如何使用 jQuery 在页面加载时关注表单输入文本字段?

TextBox - 当它失去焦点时,我可以保持选择突出显示吗?

将焦点设置在 xaml wpf 中的文本框上

WPF:如何以编程方式从 TextBox 中移除焦点