Нелогично работает SetFocus для TextBox в приложенном примере - VBA

Узнай цену своей работы

Формулировка задачи:

Всем доброго времени суток. На форме есть три TextBox-а: в первых 2-х вводятся числа, а в 3-м (TabIndex=2) выводится их сумма. Сложение происходит при событии TextBox2_Exit (TabIndex=1) с условием, что TextBox1 (TabIndex=0) не пустой (содержимое не важно). Если TextBox1 пустой - событие в TextBox2_Exit должно прерваться, а фокус должен перейти на TextBox1. При обработке возникли две неожиданные ситуации: 1. Условие на проверку TextBox1 выполняется 2 раза. 2. При выходе из TextBox2 фокус устанавливается на кнопке "Закрыть" (TabIndex=3) Укажите, пожалуйста, где моя ошибка и исправьте ее.

Решение задачи: «Нелогично работает SetFocus для TextBox в приложенном примере»

textual
Листинг программы
Option Explicit
 
'Созданная в самом верху переменная будет
    'доступна для всех процедур данного модуля.
Dim myFlag As Boolean
 
Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
 
    'Если выход происходит по нажатию клавиши "Tab" или "Enter",
        'то нужные действия уже сделаны в процедуре "TextBox2_KeyPress".
    If myFlag = True Then
 
        'Сбрасываем данные в переменной "myFlag".
        myFlag = False
 
        'Выходим из процедуры.
        Exit Sub
        
    End If
 
    If TextBox1.Value = "" Then
        MsgBox "TextBox1 пустой !", vbCritical, "ERROR !"
        Me.TextBox1.SetFocus
        Exit Sub
    Else
        TextBox3.Value = Val(TextBox1.Value) + Val(TextBox2.Value)
    End If
 
End Sub
 
'Событие "TextBox2_KeyDown" срабатывает, когда,
    'курсор находится в "TextBox2" и нажимается клавиша на клавиатуре.
Private Sub TextBox2_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
 
    'Если нажаты клавиша "Enter" или клавиша "Tab".
        'Порядковый номер в ANSI-таблице у клавиши "Enter" 13,
            'у клавиши "Tab" 9.
    If KeyCode = 13 Or KeyCode = 9 Then
 
        'Делаем пометку о том, что нажата клавиша "Enter"
            'или клавиша "Tab".
        myFlag = True
        
        'Делаем какие-то действия.
        If TextBox1.Value = "" Then
            MsgBox "TextBox1 пустой !", vbCritical, "ERROR !"
            'Помещая в переменную "KeyCode" ноль, отменяем нажатие клавиши.
            KeyCode = 0
            Me.TextBox1.SetFocus
            Exit Sub
        Else
            TextBox3.Value = Val(TextBox1.Value) + Val(TextBox2.Value)
        End If
        
    End If
 
End Sub
 
Private Sub CommandButton1_Click()
    Unload Me
End Sub

ИИ для рефератов и докладов


  • Экспорт Word по ГОСТу
  • Минимум 80% уникальности текста
  • Поиск релевантных источников в интернете
  • Готовый документ за 2 минуты

Оцени полезность:

9   голосов , оценка 3.778 из 5
Похожие ответы