2013-08-11 4 views
2

Я все еще играю с MS Access, и это сводит меня с ума. Моя текущая проблема заключается в следующем: я воссоздал панель навигации записи как подчиненную форму и добавил ее к моей основной форме. Этот код используется в подформеДоступ: События в родительской форме

... 
Private WithEvents frmParent As Access.Form 
... 

Private Sub Form_Load() 
    ... 
    Set frmParent = Me.Parent 
    frmParent.OnCurrent = "[Event Procedure]" 
    frmParent.Recordset.MoveLast 
    frmParent.Recordset.MoveFirst 
    ... 
End Sub 

Private Sub frmParent_Current() 
    If frmParent.CurrentRecord = frmParent.Recordset.Count Then 
     Me.butNext.Enabled = False 
    Else 
     Me.butNext.Enabled = True 
    End If 
    If frmParent.CurrentRecord = 1 Then 
     Me.butPrevious.Enabled = False 
    Else 
     Me.butPrevious.Enabled = True 
    End If 
End Sub 
... 
Other MainForm Events... 

Из-за этого возникают некоторые проблемы. Во-первых: ни одно из событий от пожара MainForm. Второе: время от времени (особенно после ошибок) vba теряет ссылку на основную форму. Я мог бы использовать обходное решение Win32 API с CopyMemory, но это, похоже, слишком велико.

Я, как всегда, благодарен за любую помощь.

Большое спасибо

Jon

+0

Когда вы говорите, что события не срабатывают, вы имеете в виду только в родительской форме? Или даже в подформе? Если это только в родительской форме, я не удивлюсь, поскольку вы ловите все события в подформе. –

+0

Я должен спросить, почему вы решили поместить эти навигационные кнопки в подформу? Ваша жизнь была бы проще, если бы вы разместили их непосредственно на форме, возможно, используя Rectangle для их группировки (визуально). –

+0

Поскольку у меня много разных форм, и я хотел бы иметь такое же поведение и посмотреть во всех них, я решил пойти именно так. @EMett: только события в основной форме, подформат работает по назначению. – JonBlumfeld

ответ

1

На самом деле это, кажется, ошибка в Access ... Просто создать код-файл для родительской формы в вопросе, даже если он остается пустым, и все работает отлично.

Редактировать: Я должен исправить себя. Это предполагаемое поведение. Взято из Litwin et.al .: Access 2002 Desktop Developer's handbook, p. 508

... если вы используете переменную WithEvents для реагирования на события формы, форма должна иметь связанный с ней модуль. То есть, если свойство HasModule является False, Access не беспокоит повышение событий для формы, поэтому любой код вне формы, ожидающий реакции на событие формы, не будет вызван Access.

+0

Интересно. По кодовому файлу, я думаю, вы имеете в виду модуль. В самом деле, я могу себе представить, что если для свойства HasModule формы установлено значение Нет, события не нужно запускать. Выглядит больше как функция, чем ошибка ;-) Спасибо за обмен! –

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