powered by simpleCommunicator - 2.0.41     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / закрывать форму при потере фокуса, кроме
14 сообщений из 14, страница 1 из 1
закрывать форму при потере фокуса, кроме
    #35768299
lostfocus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Имеется Форма. Форма закрывается при потере фокуса.

Как можно закрывать эту форму при потере фокуса, кроме случая, когда фокус попадает на один контрол другой формы?

Всем спасибо!
...
Рейтинг: 0 / 0
закрывать форму при потере фокуса, кроме
    #35768820
Ashton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Может изобразить что-то подобное.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
Private Sub Form_Deactivate()
    On Error GoTo HandleError
   
    If Screen.ActiveControl.Parent.Name <> Me.Name Then
        Exit Sub
    End If
    
ExitHere:
    Exit Sub

HandleError:
    Select Case Err.Number
        Case  2474 
            Me.TimerInterval =  1000 
            Debug.Print "Error: " & Err.Number
        Case Else
            Debug.Print "Error: " & Err.Number
    End Select
    
    Resume ExitHere
End Sub

Private Sub Form_Timer()
    DoCmd.Close acForm, Me.Name
End Sub
...
Рейтинг: 0 / 0
закрывать форму при потере фокуса, кроме
    #35770295
lostfocus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AshtonМожет изобразить что-то подобное.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
Private Sub Form_Deactivate()
    On Error GoTo HandleError
   
    If Screen.ActiveControl.Parent.Name <> Me.Name Then
        Exit Sub
    End If
    
ExitHere:
    Exit Sub

HandleError:
    Select Case Err.Number
        Case  2474 
            Me.TimerInterval =  1000 
            Debug.Print "Error: " & Err.Number
        Case Else
            Debug.Print "Error: " & Err.Number
    End Select
    
    Resume ExitHere
End Sub

Private Sub Form_Timer()
    DoCmd.Close acForm, Me.Name
End Sub


Что-то не очень понятно.

Имеются две отдельные открытые формы А и Б.

Форма А должна закрываться при потере фокуса, за исключением, если фокус попадет на Контрол1 формы Б. Если фокус попадет на любой другой контрол этой или другой формы, то форма А должна быть закрытой.

Как это сделать?
...
Рейтинг: 0 / 0
закрывать форму при потере фокуса, кроме
    #35771170
Ashton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если фокус попадает на другой контрол этой же формы, то форма остается в фокусе, логично? :)

Код формы A.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
Private Sub Form_Deactivate()
    On Error GoTo HandleError
   
    If Screen.ActiveForm.Name = "B" Then
        Exit Sub
    End If
    
ExitHere:
    Me.TimerInterval =  500 
    Exit Sub

HandleError:
    Select Case Err.Number
        Case  2475 
            Debug.Print "Error: " & Err.Number
            Resume ExitHere
        Case Else
            Debug.Print "Error: " & Err.Number
            Exit Sub
    End Select
End Sub

Private Sub Form_Timer()
    DoCmd.Close acForm, Me.Name
End Sub
...
Рейтинг: 0 / 0
закрывать форму при потере фокуса, кроме
    #35771259
lostfocus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AshtonМожет я чего-то не понимаю или не правильно обьясняю.
Попробую еще раз.

Имеются две отдельные открытые формы А и Б.

Форма А должна закрываться при потере фокуса.
Исключение : если фокус попадет на Контрол1 формы Б.
Если фокус попадет на любой другой контрол кроме Контрол1 формы Б, или на любую другую форму (например формы С, которая может быть открыта), то форма А должна быть закрыта.

Как это сделать?
...
Рейтинг: 0 / 0
закрывать форму при потере фокуса, кроме
    #35771423
lostfocusЕсли фокус попадет на любой другой контрол кроме Контрол1 формы Б, или на любую другую форму (например формы С, которая может быть открыта), то форма А должна быть закрыта.

Как это сделать?Наводящий вопрос:

Если фокус попадает в форму Б, но сначала на контрол2 (по-вашему, в этот момент форма А должна закрыться), но тут же следом переводится на контрол1 - то каково состояние формы А в этот момент?
...
Рейтинг: 0 / 0
закрывать форму при потере фокуса, кроме
    #35771449
lostfocus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
непоймучкаlostfocusЕсли фокус попадет на любой другой контрол кроме Контрол1 формы Б, или на любую другую форму (например формы С, которая может быть открыта), то форма А должна быть закрыта.

Как это сделать?Наводящий вопрос:

Если фокус попадает в форму Б, но сначала на контрол2 (по-вашему, в этот момент форма А должна закрыться), но тут же следом переводится на контрол1 - то каково состояние формы А в этот момент?Если фокус попадает на контрол2, а затем на контрол1, то Форма А должна быть закрыта.
...
Рейтинг: 0 / 0
закрывать форму при потере фокуса, кроме
    #35771526
lostfocusЕсли фокус попадает на контрол2, а затем на контрол1, то Форма А должна быть закрыта.Понятно. Попробуйте так (это две процедуры обработки событий в модуле формы А):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Private Sub Form_Deactivate()
    Me.TimerInterval =  100 
End Sub

Private Sub Form_Timer()
On Error Resume Next
    Dim f$: f = Screen.ActiveForm.name
    Dim p$: p = Screen.ActiveControl.name
    If f = "Форма Б" And p = "Контрол1" Then
        Me.TimerInterval =  0 
    Else
        DoCmd.Close acForm, Me.name
    End If
End Sub

Изначально в макете формы А TimerInterval=0
...
Рейтинг: 0 / 0
закрывать форму при потере фокуса, кроме
    #35772747
lostfocus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
непоймучкаlostfocusЕсли фокус попадает на контрол2, а затем на контрол1, то Форма А должна быть закрыта.Понятно. Попробуйте так (это две процедуры обработки событий в модуле формы А):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Private Sub Form_Deactivate()
    Me.TimerInterval =  100 
End Sub

Private Sub Form_Timer()
On Error Resume Next
    Dim f$: f = Screen.ActiveForm.name
    Dim p$: p = Screen.ActiveControl.name
    If f = "Форма Б" And p = "Контрол1" Then
        Me.TimerInterval =  0 
    Else
        DoCmd.Close acForm, Me.name
    End If
End Sub

Изначально в макете формы А TimerInterval=0
К сожалению, код работает частично.

Если кликнуть на любой контрол Формы Б, кроме Контрола1, то форма А закрывается. Это правильно.

Но если кликнуть сначала на Контрол1, а затем на любой другой контрол, то Форма А не закроется, а необходимо, чтобы и в этом случае форма А закрылась.

Что можно еще придумать?
...
Рейтинг: 0 / 0
закрывать форму при потере фокуса, кроме
    #35772777
Фотография mds_world
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lostfocus,
на событие потери фокуса в этом поле поставьте проверку наличия первой формы и закрывайте ее
Код: plaintext
1.
2.
If CurrentProject.AllForms("Форма А").IsLoaded Then
   DoCmd.Close acForm, "Форма А"
End If
...
Рейтинг: 0 / 0
закрывать форму при потере фокуса, кроме
    #35772781
Guest33
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может просто уменьшить интервал таймера?
...
Рейтинг: 0 / 0
закрывать форму при потере фокуса, кроме
    #35772788
lostfocusНо если кликнуть сначала на Контрол1, а затем на любой другой контрол, то Форма А не закроется, а необходимо, чтобы и в этом случае форма А закрылась.
Что можно еще придумать?А чего тут думать, это при переходе из "формы А" надо было извращаться, ибо закрыть ее в тот момент нельзя было. А тут-то все элементарно - в обработке Контрол1_LostFocus закрывайте "форму А" и все.
...
Рейтинг: 0 / 0
закрывать форму при потере фокуса, кроме
    #35772798
lostfocus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mds_worldlostfocus,
на событие потери фокуса в этом поле поставьте проверку наличия первой формы и закрывайте ее
Код: plaintext
1.
2.
If CurrentProject.AllForms("Форма А").IsLoaded Then
   DoCmd.Close acForm, "Форма А"
End If
У меня это частично работает.
Форма Б, на которой находится Контрол1, подчиненная и если я кликну на любой другой контрол в Форме Б, то форма А закрывается, но если я кликну по главной форме, то форма А не закрывается
...
Рейтинг: 0 / 0
закрывать форму при потере фокуса, кроме
    #35773039
Фотография mds_world
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lostfocusmds_worldlostfocus,
на событие потери фокуса в этом поле поставьте проверку наличия первой формы и закрывайте ее
Код: plaintext
1.
2.
If CurrentProject.AllForms("Форма А").IsLoaded Then
   DoCmd.Close acForm, "Форма А"
End If
У меня это частично работает.
Форма Б, на которой находится Контрол1, подчиненная и если я кликну на любой другой контрол в Форме Б, то форма А закрывается, но если я кликну по главной форме, то форма А не закрывается
Не совсем так, скорее всего. При первом выходе из поля в главную форму должен сработать LostFocus. А вот в при последующих выходах, если запись в подформе не менялась, то действительно, LostFocus не возникает. В этом случае у поля нет события Exit (Выход) и это правильно, имхо, поскольку в подформе сохраняется положение курсора. А вот почему не срабатывает LostFocus не знаю, это, по-моему нелогично. И что интересно, событие GotFocus возникает всегда, а LostFocus нет. Можно многократно переводить фокус из одной формы в другую и GotFocus исправно срабатывает, а LostFocus только один раз. Впрочем, если перейти на другую запись в подформе, то все начинается сначала.
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / закрывать форму при потере фокуса, кроме
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]