유형이 TVirtualStringTree
인 구성 요소가 있습니다. 옵션 toCheckSupport
이 사용 가능합니다. 전파가 필요하기 때문에 검사 상태 전파와 관련된 옵션도 사용할 수 있습니다. 나는 확인 ("당신은 정말로 확인하고 싶습니까?") 노드를 검사하고 싶습니다. 아쉽게도 전파 옵션을 사용하면 하위 노드를 포함하여 OnCheck
및 OnChecking
이벤트가 트리거됩니다. 따라서 이벤트 프로 시저에 메시지를 배치하면 반복적으로 표시됩니다. 한 번의 확인으로 노드와 하위 노드를 검사하는 방법을 알고 있습니까?TVirtualStringTree. 한 번의 확인으로 노드와 하위 노드를 확인하는 방법은 무엇입니까?
나는 수동 검사를 생각합니다. 즉, 사용자는 트리 (따라서 모든 노드의 자손)에서 노드를 확인하기를 원하고 확인을 한 번만 요청합니다. 사용자가 리프를 확인하기를 원하는 경우 확인을 통해 확인하면 노드를 이전 상태로 복원하면 충분합니다.
procedure TMyForm.VSTChecked(Sender: TBaseVirtualTree; Node: PVirtualNode);
begin
if Node.CheckState = csCheckedNormal then
begin
if not VST.HasChildren[Node] then
begin
if MessageDlg('Are you sure you want to check?', mtConfirmation,
mbYesNo, 0) <> mrYes then
begin
Node.CheckState := csUncheckedNormal;
PropagateCheckState(VST, Node); // From Node's parent to the root
end;
end;
end;
end;
나는 사용자에 의해 확인되었다 정확한 노드를 식별하기 위해 OnNodeClick
를 사용하는 방법에 대한 생각, 순서대로 잎의 앞의 체크 상태를 기억에 대해 (내 응용 프로그램에서와 같이 중요한 데이터는 잎에있다) 그들을 복원합니다. 좋은 해결책으로 이어질까요?
트리에는 체크 상태를 전파 할 때'tsCheckPropagation' 상태가 포함됩니다. 그래서 그 상태가 포함되어 있지 않은지 물어보고 사용자에게 알리십시오. 하지만 또 다른 (매우 큰) 문제가 있습니다. 즉, OnChecking 이벤트에서 메시지 대화 상자를 표시하면 상태 확인을 중단하게됩니다. – Victoria
나는 내 질문을 편집했다. (잎사귀 예제 솔루션 추가) –