Почему прямоугольник фокуса не отображается, пока не нажата клавиша Tab? - PullRequest
5 голосов
/ 10 февраля 2012

У меня странная проблема (вероятно, только для понимания), почему в тестовом приложении прямоугольник фокуса не отображается, пока я не нажму клавишу табуляции.

Я хочу показать диалог с двумя радиобоксами и двумя кнопками,Когда я отображаю диалог, я хотел бы видеть прямоугольник фокуса вокруг моей первой кнопки.(Чтобы пользователь мог видеть, где находится фокус.) Я упорядочил элементы управления и установил свойство tabindex от 0 до 4, чтобы они были в правильном порядке.(у radiobox 1 есть tabindex 0, ...)

Когда я показываю диалог, у первого radiobox есть фокус, но у него нет фокуса вокруг него.(Пока я не нажму клавишу табуляции.)

Я создал полностью пустой проект winforms (Visual Studio 2010), добавил элементы управления и запустил его.Так что в этом нет ничего особенного.

Может кто-нибудь подсказать мне, что я делаю неправильно?

Извините, вот код моего примера:

Public Class Form1

Private Sub Button1_Click(sender As System.Object, _
  e As System.EventArgs) _
    Handles Button1.Click

    Me.Close()
End Sub

Private Sub Button2_Click(sender As System.Object, _
  e As System.EventArgs) _
    Handles Button2.Click

    Me.Close()
End Sub

Private Sub Form1_Shown(sender As Object, _
   e As System.EventArgs) _
  Handles Me.Shown

    RadioButton1.Focus()
    RadioButton1.Select()
    SendKeys.SendWait("{TAB}")
    SendKeys.SendWait("+{TAB}")

End Sub

End Class

Ответы [ 4 ]

5 голосов
/ 10 февраля 2012

Как я уже говорил, это действительно настройка пользовательских настроек.

Но чтобы показать прямоугольник, попробуйте унаследовать свой собственный RadioButton и переопределить функцию ShowFocusCues:

Public Class RadioWithFocus
  Inherits RadioButton

  Protected Overrides ReadOnly Property ShowFocusCues() As Boolean
    Get
      Return True
    End Get
  End Property

End Class
1 голос
/ 10 февраля 2012

Используйте унаследованный Control.Focus() в методе инициализации вашей формы или там, где это применимо.Что-то вроде:

public Form1 () {
    //Other stuff here
    radiobox1.Focus();// If this is the name of your control
}

Еще один метод, на который стоит обратить внимание: Form.Activate.Это, вероятно, лучше использовать в этом контексте

Кроме того, ActiveControl может быть полезным.

0 голосов
/ 12 декабря 2016

Для Win32 / C ++ отправьте сообщение WM_CHANGEUISTATE в родительское окно:

    // Enable focus rect and accelerator underline in all controls.
    ::SendMessage(WM_CHANGEUISTATE, MAKELONG(UIS_CLEAR, UISF_HIDEACCEL | UISF_HIDEFOCUS), 0);
0 голосов
/ 24 июля 2013

Как сказал LarsTech, это пользовательская настройка. Для Windows 7 вы можете найти этот параметр здесь: Откройте панель управления / центр доступа / упростите использование клавиатуры.

Найдите флажок с текстом "Подчеркнуть сочетания клавиш и клавиши доступа" и отметьте его.

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

Наслаждайтесь

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