2009-06-30 2 views
7

Я создал форму с меткой, текстовым полем и кнопкой. В событии загрузки формы я вызывал функцию focus() для текстового поля. Но когда я запускаю свой код, курсор не приходит в текстовое поле. Мне нужно, чтобы курсор переместился в текстовое поле, как только будет загружена форма. Как это сделать?focus to text box

ответ

7

Если вам просто необходимо убедиться, что определенный элемент управления получает фокус при первой загрузке формы, а затем изменить TabOrder свойства всех элементов управления (в конструкторе), так что управление в вопросе «0» , и другие элементы идут оттуда: «1», «2» и т. д.

Если вам нужно динамически выбирать другой элемент управления, когда вы показываете форму в зависимости от некоторого состояния, используйте следующий код:

private void Form1_Load(object sender, EventArgs e) { 
    // You need to show the form otherwise setting focus does nothing 
    // (there are no controls to set focus to yet!) 
    this.Show() 
    if (someCondition == true) 
     control.Focus(); 
    else 
     control2.Focus(); 
} 
+0

Фокус 'может быть установлен в событии Form Shown. – 2009-06-30 05:56:48

+1

+1: установите правильный порядок элементов управления и дайте фреймворку выполнить задание. –

+4

Им может потребоваться определенный порядок табуляции, но может и не начинаться с свойства заказа табуляции 0. – 2009-06-30 06:04:40

3

Обработать событие Shown. Этот код должен работать.

private void Form1_Shown(object sender, EventArgs e) 
{ 
    textBox2.Focus(); 
} 
+0

+1 Я пробовал это, он работает. –

+0

Это касается той же проблемы, что и Активированное решение, если вы скрываете/показываете ту же форму, она всегда будет сбросить фокус. Это может быть или не быть хорошо. –

1

Не вызывайте фокус в нагрузке мероприятие. Вызовите его в событии Активация. Это будет работать

+0

Это также приведет к тому, что текстовое поле будет получать фокус каждый раз, когда форма активирована, что может быть нежелательно. –

+0

о да. Я пропустил эту деталь – Sahas

+0

Итак, какой из них будет лучшим? Активировать событие или настроить TabOrder? – Vicky

1

Вы можете установить для свойства TabIndex текстового поля значение 0, если вы всегда хотите сосредоточиться на текстовом поле при загрузке формы. (Это свойство всегда вставляется в form.designer.cs. И вам не нужно будет писать дополнительный код в вашей форме.cs.)