2008-09-16 2 views
1

Microsoft의 TreeView 컨트롤을 사용하고 있는데 노드의 레이블을 편집하는 동안 데이터 정렬을 강제로 수행하려고합니다. 그리드의 UpdateData와 비슷합니다.노드 (C#)를 편집하는 동안 TreeView에 대한 변경 내용을 커밋하려면?

기본적으로 내 편집기에는 저장 단추와이 TreeView 컨트롤이 있습니다. 원하는 것은 저장 단추를 클릭하면 TreeView에서 노드의 레이블을 편집 할 때입니다. 노드의 레이블 편집 중입니다.

답변

0

노드 레이블 편집은 텍스트 상자로 수행되며 해당 텍스트 상자에 포커스가 없어지면 이름 변경이 노드의 새 레이블로 커밋됩니다. 따라서 '저장'버튼을 클릭하면 포커스가 사라지고 텍스트 상자에 포커스가 사라 지므로 자동으로 업데이트됩니다.

'저장'버튼이 포커스를 얻지 못하면 '저장'버튼에 대한 클릭 이벤트를 처리하고 트리에서 현재 라벨 편집을 종료하도록 요청해야합니다. 메소드/속성이없는 경우 레이블 편집 요청을 요청할 때 호출 할 수 있으므로 두 가지 옵션이 있습니다. 트리 뷰에 포커스가있는 경우 포커스를 다른 곳에 배치합니다. 또는 라벨 편집을 다시 켜거나 끄십시오 ...

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

실제로 문서화되어 있지 않지만 답변을 수락 할 것인가? 아니면 그런 방법이 없습니까? 당신은 실제로 이것에 응답하지 않았고, 질문을 저에게 다시 전달했습니다.

한편으로는 TreeView를 UserControl의 일부로 사용하기 때문에 나에게 조금 더 힘들지만 다른 컨트롤 (매우 우아하지는 않지만 작동하지 않음)에 포커스를두고있는 동일한 해킹 해결책을 발견했습니다.

0

정말 저장 버튼이 필요합니까?

TreeView의 KeyDown 이벤트에서 "return"키를 듣는 등 노드 편집의 끝을들을 수 있습니다. 뭔가를 편집하고 있다면 (SelectedNode.IsEditing으로 찾으십시오) 커밋이 있음을 알 수 있습니다. 그런 다음이를 데이터 업데이트 작업에 위임 할 수 있습니다. 여러 다른 노드를 편집하여 끝에 모두 저장할 수있게하려면 편집 된 각 노드를 일종의 컬렉션에 추가해야합니다. 그런 다음 저장 버튼을 클릭하면이 컬렉션을 반복합니다.

관련 문제