2016-12-15 4 views
1

У меня возникла проблема с тем, как ведет себя список в форме Excel. Действия по воспроизведению проблемы:Проблема с формой формы Excel при использовании заблокированного свойства

  • Создать пользовательскую форму с контролем один ListBox
  • Используйте следующий код с этим пользователем формы:

    Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean) 
        Me.ListBox1.Locked = True 
        Me.ListBox1.Locked = False 
    End Sub 
    
    Private Sub UserForm_Initialize() 
        Dim i As Integer 
        For i = 1 To 10 
         Me.ListBox1.AddItem i 
        Next i 
    End Sub 
    

Когда форма первого показано, I я могу нормально перемещаться по списку, используя клавиши со стрелками и клавиши страницы. Однако после запуска события двойного щелчка вся навигация по клавиатуре не влияет, в том числе табуляция на другие элементы управления (если они находятся в форме). Нажатие на список, похоже, работает, и схема фокуса отображается правильно, но есть что-то не так с тем, как фокус обрабатывается после того, как список заблокирован и затем разблокирован. Что происходит?

Использование 32-разрядной версии Office 2013.

+0

Не то, что это особенно полезно, но я также использую 32-разрядную версию Office 2013, и это верно для меня в Excel. – OpiesDad

+0

Вы имеете в виду, что после двойного клика вы могли выбрать элементы в списке с клавиатуры? – Cpu1

+0

@ A.S.H. Куда твой ответ? Попробовав свой код, я заметил, что создание невидимого списка делает фокус на следующем элементе управления. Если нет контроля с доступной вкладкой, фокус «зависает» снова, что делает метод «.SetFocus» из списка обязательным. Таким образом, похоже, что самый надежный способ избежать этой «зависания» клавиатуры - переместить фокус на другой элемент управления, а затем вернуть его обратно в список. – Cpu1

ответ

0

мне удалось повторить этот вопрос, и настройки фокуса где-то еще до блокировки и разблокировки ListBox работал для меня:

Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean) 
    Me.TextBox1.SetFocus 'or some other control. 
    Me.ListBox1.Locked = True 
    Me.ListBox1.Locked = False 
    Me.ListBox1.SetFocus 
End Sub 
0

2 решения, которые я тестировал, которые позволяют использовать клавиши со стрелками для навигации.

  1. Учитывая, что нет ни одного обработчика события нажатия, попробуйте вызвать одним нажатием кнопки событие после DblClick (работает все время):

    Private Sub ListBox1_Click() 
        Debug.Print "ListBox1_Click()" 
    End Sub 
    
    Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean) 
        Debug.Print "ListBox1_DblClick()" 
        With Me.ListBox1 
         .Locked = True 
         .Locked = False 
        End With 
        ListBox1_Click 
    End Sub 
    
    Private Sub UserForm_Initialize() 
        Dim i As Integer 
        For i = 1 To 10 
         Me.ListBox1.AddItem i 
        Next i 
    End Sub 
    
  2. Установка Cancel = False в конце DblClick. (Иногда не работает!)

    Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean) 
        Debug.Print "ListBox1_DblClick()" 
        With Me.ListBox1 
         .Locked = True 
         .Locked = False 
        End With 
        Cancel = False 
    End Sub 
    
    Private Sub UserForm_Initialize() 
        Dim i As Integer 
        For i = 1 To 10 
         Me.ListBox1.AddItem i 
        Next i 
    End Sub 
    
+0

Извините, для меня не обошлось без обоев. Форма остается невосприимчивой к навигации на клавиатуре. – Cpu1

Смежные вопросы