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

我的 C# 程序中有文本框

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

我在 Form_Load 上试试这个:

MyTextBox.Focus();

但它不会工作

【问题讨论】:

    标签: c# winforms focus setfocus


    【解决方案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 成为表单中第一个光标“可聚焦”元素。
                            猜你喜欢
                            • 1970-01-01
                            • 1970-01-01
                            • 1970-01-01
                            • 1970-01-01
                            • 2017-01-27
                            • 1970-01-01
                            • 1970-01-01
                            • 1970-01-01
                            • 2018-09-02
                            相关资源
                            最近更新 更多