Подтвердить что ты не робот

Невозможно настроить фокус на текстовое поле Windows Forms

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

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

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

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

frmFoo/TabControl1/TabPageX/Panel1/Panel2/TextBox1

Я хочу сосредоточиться на TextBox1.

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

Ответ 1

Я предполагаю, что вы пытаетесь установить фокус в обработчике события загрузки формы? Если это так, вам нужно сделать 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

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

Ответ 2

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

Me.ActiveControl = TextBox1

или

TextBox1.Select()

Ответ 3

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

Ответ 4

Вы должны использовать 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 Событие может установить Select TextBox. Я думаю, что есть некоторые другие элементы, крадущие фокус. пожалуйста, измените

Ответ 5

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

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

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

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

SendKeys.Send("{TAB}")

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

Imports System.Windows.Forms

Ответ 6

Я обнаружил, что 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

Ответ 7

Попробуйте событие 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

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

Ответ 8

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