2010-05-11 1 views

답변

6

글쎄, 표면에, 참으로 EndEdit(true)를 호출하는 것은 AfterLabelEdit 또는 BeforeLabelEdit 이벤트 처리기에서 e.CancelEdit = true 발행과 같은 일을 할 것으로 보인다. 그러나 두 가지 방법은 동등하지 않으며 동일한 목적으로 사용되지 않습니다.

실제 행동 예제를 설명하는 것이 가장 좋습니다 :

그들은 어떻게 같은 일 때문에 : 당신이 EndEdit(true) 호출하는 경우, 트리 노드, 편집 모드를 종료하고 변경 사항을 취소합니다

  • AfterLabelEdit 동안 e.CancelEdit = true을 실행하면 트리 노드가 편집 모드를 종료하고 변경 사항을 취소합니다.

그러나 그들은, 동일하지이기 때문에 : 당신이하지 전화 EndEdit(true)경우

  • , 트리 노드 편집 모드 것이다 (분명)하지 변화,
  • 당신이 만약 AfterLabelEdit 동안 편집 모드를 떠나고 변경 사항을 커밋하는 트리 노드
  • BeforeLabelEdit 동안e.CancelEdit = true을 발행하지 않으면 트리 노드는 여전히 편집 모드로 전환됩니다.

또 다른 차이점은 EndEdit()AfterLabelEdit 트리거 것이 있지만 AfterLabelEdit 재귀 (다행히도) 자체를 실행하지 않는다.

지금, 보통 NodeLabelEditEventArgs.CancelEdit은 (AfterLabelEdit시) 트리 노드 레이블에 잘못된 수정을 폐기하거나 완전히 (BeforeLabelEdit 중) 일부 노드의 레이블을 편집에서 사용자를 방지하기 위해, 검증을 위해, 즉 사용됩니다. 두 경우 모두 사용자가 이미 레이블을 편집했거나 아직 편집을 시작하지 않았습니다.

EndEdit()은 사용자가 여전히 레이블을 편집하는 동안 편집 을 강제로 커밋하거나 취소하는 데 사용됩니다. 물론, 그것은 사용자가 자신의 동의없이 입력 및 을 완료 전에 잠재적 주요 변경 을 커밋하기 때문에 EndEdit(false) 잘못된을 의미합니다. 그래서, 나는 그런 식으로 전화 한 적이 한번도 보지 못했습니다.

EndEdit(true)를 호출하면 다른 무언가가 절대적으로 지금을 초점 필요하고 트리 노드가 포커스를 잃었을 때에 불완전한 편집을 자동 커밋하지 않으려면 현재 편집 유용 할 수 있습니다 폐기합니다. 그런 식으로 사용자의 작업을 버리는 것은 여전히 ​​무례한 일입니다.

위로 MFC 일 때 EndEdit(true)에 해당하는 합법적 인 사용이있었습니다. 사용자가 ESC 키를 누를 때 편집 취소를 누릅니다. 믿거 나 말거나, 해당 기능은 당시 MFC의 박스에서 지원되지 않았습니다 (그리고 아마도 아직은 아닙니다, 나는 체크하지 않았습니다).

하지만 최근에는 내 의견으로는 EndEdit()의 사용이별로 없습니다. 평화롭게 휴식하게하십시오.

+0

악의 또는 그렇지 않으면, 내가 가기 메뉴로 가고 있었고 내 노드가 편집 모드를 벗어나지 않았을 때 EndEdit를 호출해야했습니다. IMHO, 그것들의 가장 큰 차이점은 : AfterLabelEdit가 아직 트리거되지 않은 경우 CancelEdit를 사용할 수없는 반면 EndEdit는 어디에서나 호출 할 수 있다는 것입니다. –