考虑以下非常简单的单位:
Unit1.pas
unit Unit1; interface uses Windows,Classes,Controls,Forms,ComCtrls; type TForm1 = class(TForm) TreeView1: TTreeView; procedure FormCreate(Sender: TObject); end; var Form1: TForm1; implementation {$R *.dfm} const SLongString = 'blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah'; procedure TForm1.FormCreate(Sender: TObject); var Node: TTreeNode; begin TreeView1.Width := 200; Node := TreeView1.Items.Add(nil,SLongString); Node.Text := 'blah'; end; end.
Unit1.dfm
object Form1: TForm1 ClientHeight = 137 ClientWidth = 216 OnCreate = FormCreate PixelsPerInch = 96 TextHeight = 13 object TreeView1: TTreeView Left = 8 Top = 8 Width = 198 Height = 121 end end
将其添加到VCL Forms应用程序并运行.结果如下:
我想让水平滚动条不要显示.我该如何实现?
现在我意识到我可以删除分配很长的字符串的代码行.但这是一个针对我的问题的削减计划.在the real app the text of the nodes is changing,我想要滚动条显示是否需要,如果不需要,不显示.
我知道TVS_NOHSCROLL
风格,但我不能使用.有时,树视图包含比可用空间更宽的文本.有时不是.
我也想使用TTreeView,不想使用虚拟树视图.不是我有任何反对虚拟树视图,只是我的应用程序当前正在使用TTreeView.
解决方法
很简单,使用TreeView1.Items.BeginUpdate / EndUpdate方法和滚动条将相应地计算.
喜欢这个:
... TreeView1.Items.BeginUpdate; // change your nodes here TreeView1.Items.EndUpdate