我在我的窗体上有很多项目/节点的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