我在我的窗體上有很多項目/節點的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的調用是不必要的。) – 2011-03-24 13:34:13
您可以使用OnCollapsing和OnExpanding事件的AllowCollapse和AllowExpand參數,以防止節點被摺疊或展開。
將其與適當的邏輯相結合,以識別被點擊的節點部分。如果生成點擊在圖標上,讓動作進行,如果沒有,則忽略它(設置AllowXxxxx:= false)
但請注意不要破壞鍵盤導航。因此,您需要檢查事件的來源,並且在鍵盤事件(光標左/右)的情況下保留操作進度。
爲了跟蹤創始者事件,捕獲OnMouseDown和OnKeyDown事件,並設置收到的最新事件類型的內部指示符,以便您可以檢查以後的OnCollapsing和OnExpanding事件過程。
+1爲正確解釋。我還注意到,在OnMouseDown處理程序中使用GetHitTestInfoAt(如果允許擴展)是沒有意義的,因爲控件已經改變了控件的視覺狀態(繼承已經調用),所以你最終可以用htOnIndent而不是htOnButton當點擊擴展器/收縮器時 – Maksee 2012-06-20 14:59:16
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. Kendo UI Treeview摺疊所有項目,只展開當前節點
- 2. jsTree節點展開/摺疊
- 3. ASP.NET TreeView節點沒有展開和摺疊
- 4. Jquery Treeview展開和摺疊節點文本點擊持續cookie選項
- 5. 展開所有TreeView節點
- 6. C#winform:節點在TreeView中展開和摺疊
- 7. jsTree節點不展開/摺疊
- 8. 有沒有辦法獲取TreeView節點的展開/摺疊狀態?
- 9. WPF摺疊TreeView中的節點
- 10. 展開/摺疊div點擊多個div
- 11. 檢測TreeView節點圖像點擊
- 12. bootstrap只能打開摺疊,你點擊
- 13. WPF DataBound treeview展開/摺疊
- 14. 展開和摺疊TreeView
- 15. D3.js可摺疊樹 - 展開/摺疊中間節點
- 16. jQuery來展開摺疊只已被點擊的div
- 17. 波旁手風琴點擊一次展開/摺疊點擊
- 18. JavaFX TreeView:刪除展開/摺疊按鈕(公開節點)和功能
- 19. 點擊展開,單擊時摺疊所有其他人
- 20. 在C#treeview中展開特定節點的所有父節點
- 21. Silverlight TreeView展開頂級節點下的所有節點
- 22. TreeView的子節點展開,但根節點沒有
- 23. 點擊treeview節點打開Webbrowser表格
- 24. 展開/摺疊onc上的所有表格行點擊
- 25. WinForms TreeView的自定義展開/摺疊圖像
- 26. 當asp.net treeview節點展開/摺疊時,onbeforeunload javascript函數不應該被調用
- 27. JQuery jQGrid在標題圖層上展開/摺疊網格點擊
- 28. 當節點展開或摺疊時,如何更改WPF樹視圖中節點的圖像?
- 29. 爲什麼TreeView控件會摺疊所有的子節點?
- 30. asp.net treeview不渲染自定義展開和摺疊圖像
如果您不遵循該控件的約定,您會混淆用戶。 – 2010-01-04 16:21:42