2017-12-13 37 views
0

구현하려는 기능은 사용자가 모양을 삭제하기로 결정했을 때 예 또는 아니오 옵션과 함께 경고 메시지를 표시하기를 원합니다. 그들이 아니오를 선택하면 모양을 지우고 싶지 않습니다.모양 삭제 이벤트 건너 뛰기

내가 만날 수있는 유일한 해결책은 모든 모양을 삭제하고 OnBeforeShapeDelete 이벤트를 사용하는 것입니다. 사용자가 예를 선택하면 삭제 보호가 제거됩니다. 사용자가 아니오를 선택하면 삭제되지 않지만 매번 보호 장치 거품이 튀어 나와서 짜증나게됩니다 (사용 중지 할 수 있습니까?).

OnBeforeShape 이벤트에서 도형의 삭제 이벤트를 건너 뛸 수있는 방법이 있습니까? 아니면 다른 솔루션? 감사!

편집 : 아래 내 질문에 대한 답변입니다.

+1

'Application.EnableEvents = False'가 대답이됩니까? – Vityata

+0

좋지 않은 생각이 아니라면 이벤트가 꺼지면 다시 켜는 방법이 될 것입니다. – jediderek

+0

응용 프로그램을 켜려면'Application.EnableEvents = True'가 필요합니다. – Vityata

답변

2

당신은

Application.DisplayAlerts = False

및 모양 이벤트 다음

Application.DisplayAlerts = True

를 사용할 수 있습니다.

0

그래서 BeforeDeleteEvent를 통해 모양을 삭제할 수 없다는 것을 알게되었습니다. 셰이프에 LockDelete = 1이 있으면 BeforeDeleteEvent가 트리거되지 않습니다. 따라서 메시지 상자를 통해 개체를 삭제하는 유일한 방법은 단추 나 다른 컨트롤 이벤트에 의해 트리거 될 수있는 UI Form을 사용하는 것입니다.

3

QueryCancel로 시작하는 이벤트를 사용하면 흐름을 중단시킬 수 있습니다. 오히려,

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 

당신은 항상 선택을 처리 할 겁니다 : 그래서, 예를 들어,의 ThisDocument이를 추가하면 그 PrimaryItem는 '프로세스'마스터에서 파생 된 여부에 따라 선택을 삭제하지 할 수 있도록 것입니다 Shape 삭제 이벤트보다 더 많은 이벤트가 발생하지만, 선택을 반복하고 관심있는 모양인지 쉽게 확인할 수 있습니다. 귀하의 필요에 따라 Application, Document (위와 같음) 또는 Page level에서 청취가 가능합니다.