Не удается установить фокус на текстовое поле Windows Forms - PullRequest
13 голосов
/ 09 июня 2011

Кажется, я не могу получить фокус ввода для текстового поля при первом появлении вкладки (я использую Windows Forms, VB.NET 3.5).

У меня есть текстовое поле на панелистраница вкладки, и я хочу, чтобы фокус был на текстовом поле, когда страница вкладки появляется.Я хочу, чтобы пользователь мог сразу начать печатать в выделенном текстовом поле, не нажимая на текстовое поле.У меня есть табуляции в нужном мне порядке, а текстовое поле - первая табуляция.Вкладка перестает работать, за исключением того, что когда появляется страница вкладки, фокус не на текстовом поле, то есть на том, который находится первым в порядке вкладок.

В обработчике события Enter на вкладке я вызываю метод Focus текстового поля, но он возвращает False и ничего не делает, никаких сообщений об ошибках.Я знаю, что могу получить доступ к текстовому полю, потому что в той же точке кода я могу установить текст текстового поля.

Если это имеет значение, макет страницы вкладки немного сложен:

frmFoo/TabControl1/TabPageX/Panel1/Panel2/TextBox1

Я хочу установить фокус на TextBox1.

  1. Как лучше всего сфокусироваться на нужном текстовом поле?
  2. Если настройка фокуса является наилучшим способом, почему метод textbox.Focus () не работает?

Ответы [ 8 ]

24 голосов
/ 09 июня 2011

Я предполагаю, что вы пытаетесь установить фокус в обработчике события загрузки формы? Если это так, вам нужно сделать Me.Show(), чтобы фактически создать экранные элементы управления, прежде чем можно будет установить фокус. Что-то вроде:

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
    Me.Show()
    Application.DoEvents()
    TextBox1.Focus()
End Sub

Если вы не выполните Me.Show(), форма НЕ будет отображаться, пока не завершится событие загрузки.

Для элемента управления вкладкой обработайте событие _SelectedIndexChanged:

Private Sub TabControl1_SelectedIndexChanged(sender As Object, e As System.EventArgs) _
  Handles TabControl1.SelectedIndexChanged

    If TabControl1.SelectedTab.Name = "TabPage1" Then
        TextBox2.Focus()
    End If
    If TabControl1.SelectedTab.Name = "TabPage2" Then
        TextBox4.Focus()
    End If

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

11 голосов
/ 09 июня 2011

Попробуйте либо:

Me.ActiveControl = TextBox1

или

TextBox1.Select()
3 голосов
/ 24 февраля 2012

Сделайте control.Focus() в событии OnShown.Вам не нужна никакая логика DoEvents, которая у меня все равно не сработала.

1 голос
/ 13 февраля 2012

Любое решение, которое я нашел в Интернете, не решает проблему, когда элемент управления находится на вкладке.

Однако это работает:

(1) задает TabIndex дляустановите значение 0.

(2) В своем коде, который обрабатывает событие вкладки, выполните следующие действия:

SendKeys.Send("{TAB}")

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

Imports System.Windows.Forms
1 голос
/ 09 июня 2011

Вы должны использовать Selected Событие TabControl

Private Sub TabControl1_Selected(ByVal sender As Object, ByVal e As System.Windows.Forms.TabControlEventArgs) Handles TabControl1.Selected
    If e.TabPage.Name = "TabPage1" Then
        TextBox1.Select()
    End If
End Sub

Как я отмечал в обоих TabControl.Selected и TabPage.Enter Событие может установить Выберите TextBox.Я думаю, что есть некоторые другие элементы кражи фокуса.пожалуйста, измените

0 голосов
/ 06 августа 2013

Однажды у меня была та же проблема, но я решил ее, используя функцию Me.activate().

0 голосов
/ 18 июня 2013

Попробуйте событие Activated в форме, подобной этой:

Private Sub Form2_Activated(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Activated
    'SendKeys.Send("{TAB}") this line works too
    TextBox1.Focus()
End Sub

Это гарантированно работает.

0 голосов
/ 22 апреля 2013

Я обнаружил, что TabControl получает фокус после завершения события Selected. Для этого я использовал событие Paint вкладки TabPage, чтобы установить фокус нужного объекта.

Private Sub TabChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Tab1.Paint, Tab2.Paint, Tab3.Paint

    Select Case sender.Name
        Case "Tab1"
            Textbox1.Focus()
        Case "Tab2"
            T3extbox2.Focus()
        Case "Tab3"
            Textbox3.Focus()
    End Select

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...