我在我的窗体上有很多项目/节点的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. ASP.NET TreeView节点没有展开和折叠
- 2. 展开所有TreeView节点
- 3. C#winform:节点在TreeView中展开和折叠
- 4. 有没有办法获取TreeView节点的展开/折叠状态?
- 5. 展开/折叠div点击多个div
- 6. 检测TreeView节点图像点击
- 7. bootstrap只能打开折叠,你点击
- 8. WPF DataBound treeview展开/折叠
- 9. 展开和折叠TreeView
- 10. jQuery来展开折叠只已被点击的div
- 11. 波旁手风琴点击一次展开/折叠点击
- 12. 在C#treeview中展开特定节点的所有父节点
- 13. TreeView的子节点展开,但根节点没有
- 14. 展开/折叠onc上的所有表格行点击
- 15. 点击treeview节点打开Webbrowser表格
- 16. JQuery jQGrid在标题图层上展开/折叠网格点击
- 17. 当节点展开或折叠时,如何更改WPF树视图中节点的图像?
- 18. 为什么TreeView控件会折叠所有的子节点?
- 19. asp.net treeview不渲染自定义展开和折叠图像
- 20. 更改展开和折叠图像TreeView JavaFX 2.2
- 21. 如何通过单击节标题(Silverlight)来展开treeview节点
- 22. Treeview展开/折叠不工作?
- 23. 有没有办法按节点自动打开D3折叠树节点(对于有子节点的节点)?
- 24. jQuery的 - 的jqGrid - 展开,折叠的网格行亚格点击
- 25. MS Reportviewer - 在ViewState中保存展开/折叠的节点?
- 26. 展开折叠使用jQuery的树节点不工作
- 27. JFace TreeViewer在展开/折叠时保存树节点的状态
- 28. 在d3.js中折叠/展开树的子节点?
- 29. jQuery展开/折叠表中的TR与点击
- 30. 当点击时使用jquery展开/折叠表的2/3
如果您不遵循该控件的约定,您会混淆用户。 – 2010-01-04 16:21:42