노드를 편집하는 동안 TreeView에 대한 변경 사항을 커밋하고 싶나요(C#)?

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

  •  09-06-2019
  •  | 
  •  

문제

저는 Microsoft의 TreeView 컨트롤을 사용하고 있으며 그리드의 UpdateData와 유사한 노드 레이블을 편집하는 동안 일종의 데이터 업데이트를 강제로 시도하고 있습니다.

기본적으로 내 편집기에는 저장 버튼과 다음 TreeView 컨트롤이 있습니다.내가 원하는 것은 TreeView에서 노드의 레이블을 편집할 때 저장 버튼을 클릭하면 편집 중이던 노드의 레이블을 커밋할 수 있기를 원하는 것입니다.

도움이 되었습니까?

해결책

노드 레이블 편집은 텍스트 상자를 사용하여 수행되며 해당 텍스트 상자가 초점을 잃으면 이름 변경이 노드의 새 레이블로 커밋됩니다.따라서 클릭하고 있는 '저장' 버튼에 초점이 맞춰지면 텍스트 상자가 초점을 잃기 때문에 자동으로 업데이트됩니다.

'저장' 버튼이 포커스를 받지 않는 경우 '저장' 버튼에 대한 클릭 이벤트를 처리하고 현재 레이블 편집을 종료하도록 트리에 요청해야 합니다.메서드/속성이 없는 경우 호출하여 레이블 편집 완료를 요청할 수 있으므로 두 가지 선택이 가능합니다.트리 뷰에 초점이 있으면 초점을 다른 곳에 두십시오.또는 라벨 편집을 껐다가 다시 켜세요...

treeView.LabelEdit = false;
treeView.LabelEdit = true;

다른 팁

실제로 문서화되지는 않았지만 답변을 수락하겠습니다.그런 방법이 있나요, 없나요?당신은 실제로 이것에 대답하지 않았고 단지 나에게 질문을 다시 전달했습니다.

그 사이에 UserControl의 일부로 TreeView를 사용하기 때문에 조금 더 어렵더라도 다른 컨트롤(매우 우아하지는 않지만 작동함)에 초점을 강제하는 동일한 해킹 솔루션을 찾았습니다.

저장 버튼이 정말 필요한가요?

예를 들어 TreeView의 KeyDown 이벤트에서 "return" 키를 수신하여 노드 편집이 끝나는 것을 들을 수 있습니다.무언가를 편집하고 있다면(SelectedNode.IsEditing으로 확인) 커밋이 있다는 것을 알 수 있습니다.그런 다음 이를 dataupdate 항목에 커밋할 수 있습니다.다양한 노드를 편집하고 마지막에 모두 저장하려면 편집된 각 노드를 일종의 컬렉션에 추가한 다음 저장 버튼을 클릭할 때 이 컬렉션을 반복해야 합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top