Gali
Gali

Reputation: 14953

How do I put focus on a TextBox when a form loads?

I have a TextBox in my C# program. I need focus to be on this TextBox when the program starts.

I tried this on Form_Load:

MyTextBox.Focus();

but it doesn't work.

How do I put focus on this when the form loads?

Upvotes: 191

Views: 367079

Answers (17)

Hokan W.
Hokan W.

Reputation: 1

This is one simple way to put the textbox into focus when loading a C# form. It's similar to the above, but with a bit less coding. I can't recall where I first found the solution, but I've used it for a few years, and credits go to them.

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

Upvotes: 0

MarkLee
MarkLee

Reputation: 41

Finally i found the problem i was using metro framework and all your solutions will not work with metroTextBox, and all your solutions will work with normal textBox in load , show , visibility_change ,events, even the tab index = 0 is valid.

   // 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();
    }

Upvotes: 4

Mustafa
Mustafa

Reputation: 25

on your form, go to properties and make sure that "TopMost" property is set to true, that will solve your problem.

Upvotes: -1

Shakaib Akhtar
Shakaib Akhtar

Reputation: 371

Set Tab Index property's value = 0 and then in form load function write :

YourTextboxName.Focus();

It will work.

Upvotes: 4

Aparna Ratheesh
Aparna Ratheesh

Reputation: 21

Set Tabstop to True and TabIndex to the minimum to the control on which you need focus.

e.g. If you have 2 TextBoxes : TextBox1 and TextBox2, set Tabstop to True for both and TabIndex to 0 and 1 respectively. When the form loads, the focus will be on TextBox1 and on the press of 'Tab' key, the focus will move to TextBox2.

Upvotes: 1

user9248597
user9248597

Reputation: 21

You can use either textBox1.select(); or the TabIndex in textbox setting. TabIndex=0 focoused first.

Upvotes: 2

DavidG
DavidG

Reputation: 834

You cannot set focus to a control if it has not been rendered. Form.Load() occurs before the controls are rendered.

Go to the form's events and double click the "Shown" event. In the form's shown event handler call the control.Focus() method.

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

Upvotes: 32

Sudip Bhattacharya
Sudip Bhattacharya

Reputation: 73

In jquery set focus

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

or in Javascript you can do

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

Upvotes: -5

Muhafil Saiyed
Muhafil Saiyed

Reputation: 230

it's worked for me set tabindex to 0 this.yourtextbox.TabIndex = 0;

Upvotes: 0

Mehmet Taha Meral
Mehmet Taha Meral

Reputation: 3843

I solved my problem with changing "TabIndex" property of TextBox. I set 0 for TextBox that I want to focus it on Form when the program start.

Upvotes: 5

Ben
Ben

Reputation: 2269

The reason you can't get it to work is because the Load event is called before the form is drawn or rendered.

It like telling a pizza place how to make your pizza, and then asking them to send you a picture of how much pepperoni is on your pizza before they made it.

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();
        }
    }
}

Upvotes: 8

Neil Knight
Neil Knight

Reputation: 48537

You could try:

MyTextBox.Select();

According to the documentation:

The Select method activates the control if the control's Selectable style bit is set to true in ControlStyles, it is contained in another control, and all its parent controls are both visible and enabled.

You can first check if the control can be selectable by inspecting the MyTextBox.CanSelect property.

Upvotes: 15

Nitin...
Nitin...

Reputation: 337

use form shown event and set

MyTextBox.Focus();

Upvotes: 4

V4Vendetta
V4Vendetta

Reputation: 38200

Set theActiveControl property of the form and you should be fine.

this.ActiveControl = yourtextboxname;

Upvotes: 407

GRC
GRC

Reputation: 79

Textbox.Focus() "Tries" to set focus on the textbox element. In case of the element visibility is hidden for example, Focus() will not work. So make sure that your element is visible before calling Focus().

Upvotes: 7

Andy Johnson
Andy Johnson

Reputation: 8149

If you only want to set the focus the first time the form is shown, try handling the Form.Shown event and doing it there. Otherwise use Control.VisibleChanged.

Upvotes: 13

Spacemancraig
Spacemancraig

Reputation: 1396

check your tab order and make sure the textbox is set to zero

Upvotes: 26

Related Questions