많은 항목/노드가 포함 된 TreeView에 대한 양식이 있습니다. 노드의 항목을 두 번 클릭하면 (클릭 한 항목에 따라) 프로 시저를 실행합니다. 내 문제는 노드의 아이콘 (+ 또는 - 부호)을 클릭 할 때만 노드를 확장/축소하려는 경우입니다. 나는 :)이 좋은 해결책은 아니지만 작동 항목 내가 아는확장/축소 노드 이미지 클릭에 의한 TreeView 클릭
답변
을 두 번 클릭하지 않을 경우.
procedure TForm1.TWDblClick(Sender: TObject);
begin
TW.Items.BeginUpdate;
TW.Selected.Expanded:=not TW.Selected.Expanded;
TW.Items.EndUpdate;
end;
TWDblClick()에서 눈에 띄는 시간이 걸리는 다른 함수를 호출하는 경우 특히 깜박임이 발생할 수 있습니다. 이 문제를 해결하려면 확장/축소 상태를 전환 한 직후에 TW.Repaint를 호출하십시오. (BeginUpdate/EndUpdate에 대한 호출은 불필요합니다.) 정확한 설명은 –
당신은 축소 또는 확대되는 노드를 방지하기 위해 OnCollapsing 및 OnExpanding 이벤트의 AllowCollapse 및 AllowExpand 매개 변수를 사용할 수 있습니다.
적절한 논리를 사용하여 클릭 한 노드의 일부를 인식합니다. 클릭에 생성 된 클릭이 아이콘에있는 경우 액션을 진행시키고 무시한 다음 (AllowXxxxx : = false로 설정)
그러나 키보드 탐색을 중단하지 않도록주의하십시오. 따라서 이벤트의 출처를 확인해야하며, 키보드 이벤트 (커서 왼쪽/오른쪽)의 경우 작업 진행 상태를 유지해야합니다.
발신자 이벤트를 추적하고 OnMouseDown 및 OnKeyDown 이벤트를 캡처하고 수신 된 최신 이벤트 유형의 내부 표시기를 설정하여 나중에 OnCollapsing 및 OnExpanding 이벤트 프로세스를 확인할 수 있습니다.
+1입니다. 컨트롤이 이미 컨트롤의 시각적 상태 (이미 호출 된)로 변경되었으므로 OnMouseDown 핸들러 내에서 GetHitTestInfoAt를 사용하는 것이 이해가되지 않는 것으로 나타났습니다 (이미 상속 됨). 그러면 htOnButton 대신 htOnIndent로 끝날 수 있습니다 확장기/collapser를 클릭하면 – Maksee
unit TreeViewNav;
interface
uses
SysUtils, Classes, Controls, ComCtrls, Messages;
type
TNavTreeView = class(TTreeView)
private
procedure WMLButtonDblClk(var Message: TWMLButtonDblClk);
message WM_LBUTTONDBLCLK;
protected
FNoCollapse: Boolean;
function CanCollapse(Node: TTreeNode): Boolean; override;
end;
implementation
{ TNavTreeView }
function TNavTreeView.CanCollapse(Node: TTreeNode): Boolean;
begin
Result := not FNoCollapse and inherited;
FNoCollapse := False;
end;
procedure TNavTreeView.WMLButtonDblClk(var Message: TWMLButtonDblClk);
var
PX, PY: Integer;
HT: THitTests;
begin
with Message do
if (Width > 32768) or (Height > 32768) then
with CalcCursorPos do
begin
PX := X;
PY := Y;
end
else
begin
PX := XPos;
PY := YPos;
end;
HT := GetHitTestInfoAt(PX, PY);
if htOnItem in HT then
begin
FNoCollapse := True;
end;
inherited;
end;
end.
- 1. winform에서 TreeView 노드 매핑
- 2. Jquery TreeView 노드 추가
- 3. Treeview prevent 노드 붕괴
- 4. C# TreeView 노드
- 5. TreeView 사용자 정의 노드
- 6. 색인에 의한 simpleXML 노드 액세스
- 7. 클릭 한 노드를 확인하는 방법. Silverlight treeview
- 8. TreeView 자식 노드에 대한 이벤트 선택 또는 클릭
- 9. Silverlight TreeView 노드 확장 감지
- 10. ASP.NET Telerik TreeView 노드 커서
- 11. WPF의 노드 간 선 TreeView
- 12. TreeView 하위 노드 채우기 문제
- 13. jQuery - 클릭에 따라 이미지 변경
- 14. 트리보기에서 노드 클릭
- 15. TreeView ContextMenu에서 MenuItem 클릭 이벤트를 얻는 방법
- 16. Drupal - 역할에 의한 노드 폼 객체 가시성
- 17. C#의 TreeView 컨트롤에서 노드 검사
- 18. ASPNET TreeView 확장 된 노드 스타일
- 19. asp.net treeview 스왑 노드 텍스트 및 아이콘
- 20. Silverlight에서 특정 노드 가져 오기 Telerik TreeView
- 21. TreeView 컨트롤에서 ASP.NET SiteMap 노드 숨기기
- 22. 3 개의 레이어 Treeview 노드 체크 박스
- 23. Treeview 노드 템플릿을 만드는 방법은 무엇입니까?
- 24. Treeview wpf의 노드 사이의 중간 영역
- 25. 웹 컨트롤 TreeView 프로그래밍 방식으로 노드 선택
- 26. C#의 TreeView 노드 강조 표시 색
- 27. 바디 클릭에 Telerik 트리보기 숨기기
- 28. C++ 클릭에 따라 이미지 변경 (Visual Studio C++)
- 29. WPF TreeView 자식 노드를 클릭 가능하게 만들기
- 30. TreeView, 더블 클릭 마우스 이벤트 무시 WPF
해당 컨트롤에 대한 규칙을 따르지 않으면 사용자를 혼동하게됩니다. –