как поставить фокус на TextBox при загрузке формы?


156

У меня в моей программе C # textBox

Мне нужно, чтобы при запуске программы фокус был на textBox

Я пытаюсь это на Form_Load:

MyTextBox.Focus();

но это не сработает

Ответы:


341

Установите ActiveControlсвойство формы, и вы должны быть в порядке.

this.ActiveControl = yourtextboxname;

1
Я попробовал это для ComboBox. Но это тоже не работает!
Алекс Джолиг

1
Спасибо, это сработало для меня, где все остальное не сделал. Не уверен, почему Tab Index = 0 не будет работать, но, вероятно, при загрузке формы / показа диалога происходит странный порядок операций.
Дэвид Кэрриган

1
ПОПРОБУЙТЕ ЭТО >>> this.ActiveControl = yourtextboxname.Control;
Поламин Сингхасвич

3
Это прекрасно работает, но почему не MyTextBox.Focus();работает - кажется, работает нормально, когда программа запущена.
Левон

2
Писать this.ActiveControl = textBox1;Каждый понимает значение слова «textBox1». "youttextboxname" звучит как... = "MyTextBox";
Bitterblue

25

проверьте порядок вкладок и убедитесь, что текстовое поле установлено на ноль


Работает. Или просто tabindex, чтобы быть первым «фокусируемым» элементом курсора в форме.
apincik

15

Вы можете попробовать:

MyTextBox.Select ();

Согласно документации:

Метод Select активирует элемент управления, если в ControlStyles для бита стиля элемента управления установлено значение true, он содержится в другом элементе управления, и все его родительские элементы управления видимы и включены.

Сначала вы можете проверить, можно ли выбрать элемент управления, проверив свойство 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();
        }
    }
}

4

Я решил свою проблему с изменением свойства "TabIndex" TextBox. Я установил 0 для TextBox, чтобы при запуске программы сосредоточить его на форме.



3

Установите значение свойства Tab Tab = 0, а затем в функции загрузки формы напишите:

YourTextboxName.Focus();

Это сработает.


2

Вы можете использовать textBox1.select();или TabIndex в настройках текстового поля . TabIndex=0сосредоточены в первую очередь.


Если мы вызываем textBox1.select (); в обработчике события загрузки формы он устанавливает фокус в textBox1.
Тушар Р.

1

Установите Tabstop на True и TabIndex на минимум для элемента управления, на котором вам нужно сосредоточиться.

Например, если у вас есть 2 TextBoxes: TextBox1 и TextBox2, установите Tabstop на True для обоих и TabIndex на 0 и 1 соответственно. Когда форма загрузится, фокус будет на TextBox1 и при нажатии клавиши «Tab» фокус переместится на TextBox2.


1

в форме перейдите в свойства и убедитесь, что для свойства "TopMost" установлено значение true, что решит вашу проблему.



0

Наконец, я обнаружил проблему, которую использовал с помощью Metro Framework, и все ваши решения не будут работать с metroTextBox, и все ваши решения будут работать с обычным textBox в load, show, visibility_change, events, даже если tab tab = 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.
Бен Фойгт
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.