Помогите с фокусами

madg
Дата: 04.06.2004 09:24:51
Гдето здесь случайно наткнулся на похожую тему, но где и как запамятовал.
Если кто знает, дайте ссылочку, плииз!
Ситуевина такая, привожу код закрытия справочника, после которого значение
из справочника переносится в поле Kategoria1 формы Reestr, с этим не сложно,
Private Sub btCloze_Click()
    On Error GoTo Street_Err
Me.Refresh
    Dim A1 As String
A1 = Me.id
DoCmd.Close
Forms![Reestr]![Kategoria1].Requery
Forms![Reestr]![Kategoria1] = A1
Forms![Reestr]![Kategoria1].SetFocus
    Exit Sub

Street_Err:
MsgBox "данные не введены"
DoCmd.Close
End Sub

А как данные внести не в Kategoria1 а в поле где находился фокус при вызове справочника.

Спасибо!
Boroda
Дата: 04.06.2004 09:30:34
примерно так:

Public Ctr As Control ' описываешь в каком нибудь модуле
'---------------
set Ctr =Screen.ActiveControl ' перед вызовом справочника:

' заменяешь свой код
with Ctr
.Requery
.value = A1
.SetFocus
end with
paparome
Дата: 04.06.2004 09:32:39
ИМХО

1. При вызове справочника надо запомнить контрол в котором находился фокус
(Справочник вызывается кнопкой, значит следует получить фокус контрола у которого был фокус до кнопки = Screen.PreviousControl в обработчике нажатия кнопки)
2. Не забывать проверять, что данный контрол является редактируемым, полем (а не, к примеру, другой кнопкой) и т.п.
madg
Дата: 04.06.2004 10:20:46
Коллективный разум сильная вещь!
Private Sub btCloze_Click()
    On Error GoTo Street_Err
Me.Refresh
    Dim A1 As String
A1 = Me.id
DoCmd.Close
With Ctr
.Requery
.Value = A1
.SetFocus
End With
Exit Sub

Street_Err:
MsgBox "Вы отказались от ввода данных"
DoCmd.Close
With Ctr
.Requery
.SetFocus
End With
End Sub

RE:paparome
> Не забывать проверять, что данный контрол является редактируемым, полем
Я и не знал, что такое вообще возможно!
И как.....?
Boroda
Дата: 04.06.2004 11:35:19
ctr.enabled= true
ctr.locked=false
madg
Дата: 04.06.2004 12:10:19
Сам от себя такого не ожидал!
Private Sub K66_Click()
On Error GoTo Data_Err
Set Ctr = Screen.PreviousControl
    If Ctr.Enabled = True Then
        If Ctr.Locked = False Then
Set Ctr = Screen.PreviousControl
Me.Refresh
DoCmd.OpenForm "Kategoria", acNormal, "", "", acAdd, acNormal
Dim ctlCurrentControl As Control
Dim strControlName As String
Set ctlCurrentControl = Screen.ActiveControl
strControlName = ctlCurrentControl.Name
Else
MsgBox "Не выбрано поле Категория"
GoTo Data_Err
End If
Else
MsgBox "Не выбрано поле Категория"
GoTo Data_Err
End If
Exit Sub
Data_Err:
    MsgBox "Ошибка ввода данных"
    Me.Kategoria1.SetFocus
End Sub

Может можно как нить проще?

PS
Всегда хочется что нибуть лучше!
madg
Дата: 04.06.2004 12:30:53
Private Sub K66_Click()
On Error GoTo Data_Err
Set Ctr = Screen.PreviousControl
    If Ctr.Enabled = True Then
    If Ctr.Locked = False Then
Me.Refresh
DoCmd.OpenForm "Kategoria", acNormal, "", "", acAdd, acNormal
Dim ctlCurrentControl As Control
Dim strControlName As String
Set ctlCurrentControl = Screen.ActiveControl
strControlName = ctlCurrentControl.Name
End If
End If
Exit Sub
Data_Err:
    MsgBox "Ошибка ввода данных"
    Me.Kategoria1.SetFocus
End Sub

Если отключить обработчик ошибки, на оибочные значения перехода по IF нет,
выкидывает в дебуггер.
Ну не хочет, как хочет.
А жаль!