GoDiagrams에서 크기 조정이나 편집과 같은 사용자 작업을 어떻게 "미리보기"합니까?

StackOverflow https://stackoverflow.com/questions/111744

  •  02-07-2019
  •  | 
  •  

문제

  • GoDiagram 개체 모델에는 GoDocument가 있습니다.
  • GoView에는 GoDocument에 대한 참조가 있습니다.
  • 사용자가 다이어그램 화면을 수정하면 이벤트 인수에 관련 정보가 포함된 GoDocument.Changed 이벤트가 발생합니다.

일부 사용자 작업이 발생할 때 알림을 받고 싶습니다. 그러면 컨트롤러와 협의(필요한 경우 허용하지 않거나 취소)한 다음 거기에서 실제로 수정하는 보기 업데이트 명령을 발행할 수 있습니다. 노스우즈 고다이어그램 타사 구성 요소.
Changed 이벤트는 방금 어떤 일이 발생했다는 알림입니다(과거 시제). 이벤트 핸들러에서 위의 모든 작업을 수행하면 ....(좀 기다려)...StackOverflow예외.(GoDocument.Changed 핸들러 > GoDocument 업데이트 > 새 변경된 이벤트 실행..)

그렇다면 GoDiagrams에서 BeforeEditing 또는 BeforeResizing 종류의 알림 모델을 어떻게 얻을 수 있습니까?그곳에 가본 사람 중에 살아서 이야기를 전한 사람이 있나요?

도움이 되었습니까?

해결책

쯧쯧...구성 요소 공급업체의 권장 사항은 이에 대한 적절한 메서드를 하위 클래스로 분류하고 재정의하는 것입니다.bool CanXXX() 메서드를 재정의하고 취소 가능한 맞춤 이벤트를 발생시킵니다.구독자가 false를 반환하면 구제 조치를 취합니다(사용자 작업을 중단하려면 false를 반환합니다.) CanXXX의.GoDiagrams에는 이에 대한 기본 제공 메커니즘이 없습니다.

예를 들어, CustomView.Objectresizing Calelable 이벤트를 정의 할 수 있습니다.gotoolresizing.canstart를 재정의하면 해당 이벤트를 올릴 수 있습니다.cancelEventArgs.cancel 속성이 참이되면 canstart ()가 false를 반환 할 수 있습니다.

원천 http://www.nwoods.com/forum/forum_posts.asp?TID=2745

다른 팁

변경 이벤트에 대한 이벤트 인수(GoChangedEventArgs)에는 변경 이벤트가 "RaiseChanging" 메서드에서 발생했는지(true) 또는 raiseChanged(false)에서 발생했는지 여부를 나타내는 IsBeforeChanging 속성이 있습니다.그러면 변경 사항이 아직 발생했는지 알 수 있지만 취소할 수 있는 방법은 없습니다.

제가 제안할 수 있는 최선의 방법은 변경이 허용되는지 확인하고 이를 수행하는 대신 변경이 허용되는지 확인하는 것입니다. ~ 아니다 허용되며, 그렇지 않은 경우 변경 이벤트의 인수에 대해 "Undo" 메서드를 호출합니다.그래서 본질적으로:

OnChanged(GoChangedEventArgs e)
{
  if(NotAllowed)
  {
    e.Undo();
  }
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top