我想要实现的功能是当用户决定删除一个形状时,我希望它们有一个带有是或否选项的警告消息。如果他们选择否,我不希望删除形状。
我能想出的唯一解决方案是锁定每个形状的删除并使用OnBeforeShapeDelete事件。如果用户选择“是”,则删除删除保护。如果用户选择“否”,它将不会删除,但我很生气,每次都会弹出保护气泡(可以关闭吗?)。
在OnBeforeShape事件中有没有办法可以跳过形状的删除事件?或任何其他解决方案?谢谢!
编辑: 我在下面回答了我自己的问题。
答案 0 :(得分:3)
以QueryCancel开头的事件允许您入侵流。因此,例如,将此添加到ThisDocument将允许您不基于其PrimaryItem是否来自' Process'来删除选择。主:
Private Function Document_QueryCancelSelectionDelete(ByVal Selection As IVSelection) As Boolean
Dim queryResult As Boolean
Dim shp As Shape
Set shp = Selection.PrimaryItem
If Not shp Is Nothing Then
If Not shp.Master Is Nothing Then
If shp.Master.NameU = "Process" Then
Dim res As VbMsgBoxResult
res = MsgBox("Are you sure you want to delete '" & shp.NameID & "'?", vbYesNo, "Delete Process shape?")
If Not res = vbYes Then
queryResult = True
End If
End If
End If
End If
'Return True to cancel the event
'Return False to let it continue
Document_QueryCancelSelectionDelete = queryResult
End Function
您总是要处理选择,而不是将删除事件作为可取消事件的所有内容,但您可以轻松地遍历您的选择并确定是否它是一种有趣的形状。根据您的需要,可以在应用程序,文档(如上所述)或页面级别进行聆听。
答案 1 :(得分:2)
您可以使用
Application.DisplayAlerts = False
然后
Application.DisplayAlerts = True
在形状事件中。
答案 2 :(得分:0)
所以我了解到你无法阻止通过BeforeDeleteEvent删除形状。如果形状具有LockDelete = 1,则不会触发BeforeDeleteEvent。因此,通过消息框删除对象的唯一方法是通过按钮或其他控制事件触发的UI表单。