这是个饱受非议的控件; 我通过尝试, 理解了非议, 也能理解作者. 总之向作者的思路靠拢吧, 还是不错的.
TIWTreeView 所在单元及继承链:
IWCompTreeview.TIWTreeView < TIWCustomControl < TIWBaseHTMLControl < TIWBaseControl < TIWVCLBaseControl < TControl < TComponent < TPersistent < TObject
主要成员:
property Items: TIWTreeViewItems //所有 Item 的集合 property Selected: TIWTreeViewItem //在这里, 叫做 "当前 Item" 更合适 property AutoIndent: Boolean //是否自动缩排; 默认 True property DoServerSidePlusMinus: Boolean //如果是 True, Html 中不包含被折叠的部分, 需要展开时再从服务器读取; 相反, Html 中包含所有节点; 默认 False property TreeViewImages: TIWTreeViewImages //通过其 OpenFolderImage、ClosedFolderImage、DocumentImage、PlusImage、MinusImage 子属性指定五个图标 property ItemSpace: TIWTreeViewItemSpace //调整纵、横间距 property UseItemImages: Boolean //是否使用 Item 标志图像 property TreeViewImagesWidth: Integer //图标宽度 property TreeViewImagesHeigth: Integer //图标高度 property UseFrame: Boolean //是否使用框架 property ScrollToName: string //滚动到指定名称的 Item property ScrollBars: TIWScrollStyle //滚动条选项 property WrapItems: Boolean //Item 文本能否换行; 默认 False property DoRefreshControl: Boolean //在修改某些属性时必须让它为 True 才会有效 property TreeItemClick: TIWTreeViewClickEvent //通过它可以为每个 Item 指定 Click 事件 property OnPlusMinus: TTreeViewPlusMinusProc //每当展开或收拢子节点时 procedure ClearAll //
TIWTreeViewItems 与 TIWTreeViewItem:
{IWCompTreeview.TIWTreeViewItems < TOwnedCollection < TCollection < TPersistent < TObject} property Count: Integer property Items[AIndex: Integer]: TIWTreeViewItem function Add(aParentItem: TIWTreeViewItem): TIWTreeViewItem procedure Clear procedure Delete(Index: Integer) function Insert(Index: Integer): TCollectionItem {IWCompTreeview.TIWTreeViewItem < TCollectionItem < TPersistent < TObject} property ParentItem: TIWTreeViewItem property SubItems: TList property UserData: TObject property Caption: string property Expanded: Boolean property Font: TIWFont property Hint: string property ItemImages: TIWTreeViewImages property Tag: Integer property URL: string property Version: Integer property Css: string property Collection: TCollection property ID: Integer property Index: Integer property Name: string property DisplayName: string property OnClick: TNotifyEvent procedure DoClick function HasChild: Boolean
测试:
{在空白窗体上放 IWRegion1 和 IWTreeView1; 下面代码在设计时实现会更方便} procedure TIWForm1.IWAppFormCreate(Sender: TObject); var fItem: TIWTreeViewItem; begin IWRegion1.Width := 200; IWRegion1.Align := alLeft; IWRegion1.Color := clWebYellow; LinkColor := clWebRed; //如果给 TIWTreeViewItem 指定了 OnClick 事件, 它会被呈现为链接 IWTreeView1.Parent := IWRegion1; IWTreeView1.Align := alClient; IWTreeView1.Items.Add(nil).Caption := 'ItemA'; IWTreeView1.Items.Add(nil).Caption := 'ItemB'; IWTreeView1.Items.Add(nil).Caption := 'ItemC'; fItem := IWTreeView1.Items.Add(nil); fItem.Caption := 'ItemD'; IWTreeView1.Items.Add(fItem).Caption := 'ItemD1'; IWTreeView1.Items.Add(fItem).Caption := 'ItemD2'; fItem := IWTreeView1.Items.Add(fItem); fItem.Caption := 'ItemD3'; IWTreeView1.Items.Add(fItem).Caption := 'ItemD31'; IWTreeView1.Items.Add(fItem).Caption := 'ItemD32'; end; {尽管可以为每个 Item 指定 OnClick, 但我觉得用 TreeItemClick 事件一起指定更方便; 事件中可以通过其 Tag、ID、Name、Caption等来区别} procedure TIWForm1.IWTreeView1TreeItemClick(Sender: TObject; ATreeViewItem: TIWTreeViewItem); begin if not ATreeViewItem.HasChild then WebApplication.ShowMessage(ATreeViewItem.Caption); end;
效果图:

分类:
IntraWeb
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
2013-06-16 没用过的函数 GetHomePath - 获取用户程序数据目录
2008-06-16 再学 GDI+[43]: 文本输出 - 获取已安装的字体列表
2008-06-16 获取已打开的所有记事本的标题
2008-06-16 再学 GDI+[42]: 文本输出 - 字号单位
2008-06-16 再学 GDI+[41]: 文本输出 - 控制输出字符的个数
2008-06-16 再学 GDI+[40]: 文本输出 - 选择画刷
2008-06-16 再学 GDI+[39]: 文本输出 - 文本样式