Гость
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / закрывать форму при потере фокуса, кроме / 14 сообщений из 14, страница 1 из 1
21.01.2009, 00:28
    #35768299
lostfocus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
закрывать форму при потере фокуса, кроме
Имеется Форма. Форма закрывается при потере фокуса.

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

Всем спасибо!
...
Рейтинг: 0 / 0
21.01.2009, 11:14
    #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
21.01.2009, 18:24
    #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
22.01.2009, 10:28
    #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
22.01.2009, 10:58
    #35771259
lostfocus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
закрывать форму при потере фокуса, кроме
AshtonМожет я чего-то не понимаю или не правильно обьясняю.
Попробую еще раз.

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

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

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

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

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

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

Если фокус попадает в форму Б, но сначала на контрол2 (по-вашему, в этот момент форма А должна закрыться), но тут же следом переводится на контрол1 - то каково состояние формы А в этот момент?Если фокус попадает на контрол2, а затем на контрол1, то Форма А должна быть закрыта.
...
Рейтинг: 0 / 0
22.01.2009, 12:17
    #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
22.01.2009, 23:05
    #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
22.01.2009, 23:48
    #35772777
mds_world
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
закрывать форму при потере фокуса, кроме
lostfocus,
на событие потери фокуса в этом поле поставьте проверку наличия первой формы и закрывайте ее
Код: plaintext
1.
2.
If CurrentProject.AllForms("Форма А").IsLoaded Then
   DoCmd.Close acForm, "Форма А"
End If
...
Рейтинг: 0 / 0
22.01.2009, 23:52
    #35772781
Guest33
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
закрывать форму при потере фокуса, кроме
Может просто уменьшить интервал таймера?
...
Рейтинг: 0 / 0
23.01.2009, 00:00
    #35772788
закрывать форму при потере фокуса, кроме
lostfocusНо если кликнуть сначала на Контрол1, а затем на любой другой контрол, то Форма А не закроется, а необходимо, чтобы и в этом случае форма А закрылась.
Что можно еще придумать?А чего тут думать, это при переходе из "формы А" надо было извращаться, ибо закрыть ее в тот момент нельзя было. А тут-то все элементарно - в обработке Контрол1_LostFocus закрывайте "форму А" и все.
...
Рейтинг: 0 / 0
23.01.2009, 00:08
    #35772798
lostfocus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
закрывать форму при потере фокуса, кроме
mds_worldlostfocus,
на событие потери фокуса в этом поле поставьте проверку наличия первой формы и закрывайте ее
Код: plaintext
1.
2.
If CurrentProject.AllForms("Форма А").IsLoaded Then
   DoCmd.Close acForm, "Форма А"
End If
У меня это частично работает.
Форма Б, на которой находится Контрол1, подчиненная и если я кликну на любой другой контрол в Форме Б, то форма А закрывается, но если я кликну по главной форме, то форма А не закрывается
...
Рейтинг: 0 / 0
23.01.2009, 09:21
    #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
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / закрывать форму при потере фокуса, кроме / 14 сообщений из 14, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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