Ситуация: У меня есть db Access 2010, предназначенная для развертывания на планшете Windows 8. Основная форма приложения содержит элемент управления Treeview. Выбор узла в Treeview устанавливает видимость одной из нескольких подформ, которые используются для просмотра/редактирования деталей выбранного элемента узла. У меня есть окно сообщения yes/no и некоторый базовый код события BeforeUpdate для каждой из подформ. Поэтому, когда запись на субформате грязная, и пользователь щелкает в любом месте основной формы (в том числе в любом месте элемента управления Treeview), этот код запускается.Treeview ведет себя по-разному при нажатии, чем при нажатии
Проблема: Когда запись подформы грязная, и пользователь вступает в действие в любом элементе управления Treeview, появляется окно сообщения, но с ним невозможно взаимодействовать, поскольку приложение занято. Выполняя то, что я не знаю, но он остается таким, пока Access не будет закрыт через диспетчер задач. Для Treeview нет кода, связанного с чем-либо, кроме события Click. Это происходит даже тогда, когда они касаются пробела в Treeview ниже существующих узлов.
Если запись не загрязнена, все работает нормально.
Если запись загрязнена, и пользователь нажимает кнопку «Сохранить» на субформе для запуска события BeforeUpdate, все работает нормально.
Если пользователь удаляет другой элемент управления или в пустом пространстве основной формы, запускается событие BeforeUpdate, и все работает нормально.
Если вы подключите мышь к планшету и выполните одну и ту же последовательность шагов, нажав вместо нажатия, все будет хорошо.
Я выполнил тонну поиска и не смог найти что-либо, имеющее отношение к этому, поэтому любые предложения или рекомендации по новым местам поиска предложений были бы глубоко оценены.
Я прикрепил образец кода BeforeUpdate, который существует в каждой из этих подформ. Это довольно простой, но, может быть, есть что-то в этом, и нажатие на Treeviews просто не нравится.
Private Sub Form_BeforeUpdate(Cancel As Integer)
'If the form data has changed a message is shown asking if
'the changes should be saved. If the answer is no then
'the changes are undone
On Error GoTo BeforeUpdate_Error
If Me.Dirty Then
'Add PropertyID, LPParentNodeID and TreeNodeID if Record is new
If Me.NewRecord Then
Me.PropertyID = Me.Parent!PropertyID
Me.LPParentNodeID = Me.Parent!txtCurrKey
Me.TreeNodeID = DateDiff("s", Date, Now())
End If
'Display prompt to save the record
If MsgBox("The record has changed - do you want to save it?", _
vbYesNo + vbQuestion, "Save Changes") = vbNo Then
Me.Undo
End If
End If
'If the record is still dirty, then record the change in the Audit table
If Me.Dirty Then
Call AuditTrail(Me, InstanceID, PropertyID)
End If
BeforeUpdate_Exit:
Exit Sub
BeforeUpdate_Error:
MsgBox Err.Description
Resume BeforeUpdate_Exit
End Sub
30.08.2013 Дополнение: Я забыл упомянуть поведение отладки в исходном вопросе. Когда я устанавливаю точку останова на Subform SubUpdate подформы в любой строке от фактической точки входа Sub до инструкции If с полем сообщения, появляется окно кода, но приложение снова становится занятым, и я не могу взаимодействовать с либо окно. Как и раньше, это поведение уникально для того, чтобы использовать этот проклятый элемент управления Treeview.
Это звучит, как вы покрыли ваши базы достаточно хорошо. Вы можете попробовать использовать подпрограмму для вывода отладочных сообщений в текстовый файл, чтобы увидеть, где в вашем коде Access зависает, или последние процессы. Это утомительно, потому что вам понадобится строка кода отладки после почти каждой строки кода, который вы опубликовали. Но это может помочь вам понять, где происходит зависание, и затем вы можете попытаться найти творческое решение. – HK1
Tedious меня не беспокоит. На мой взгляд, это связано с устранением неполадок. Но ваш комментарий напомнил мне, что я не поместил отладочное поведение в исходный вопрос. У меня есть сейчас. Считаете ли вы, что писать текст в текст может дать лучшее представление о том, где он висит? С вышеописанным поведением точки останова моя единственная подсказка заключалась в том, что пользователи видят это окно сообщения перед его смертью. – SherryMas
Очень странно. Я бы сказал, что у меня много идей. Это звучит как какая-то ошибка в элементе управления ActiveX или где-то в Windows 8. – HK1