15

考虑以下非常简单的单元:

单元1.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.

单元1.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 应用程序并运行。结果如下所示:

在此处输入图像描述

我希望不显示水平滚动条。我怎样才能做到这一点?

现在我意识到我可以删除分配很长字符串的代码行。但就我的问题而言,这是一个缩减程序。在实际应用程序中,节点的文本正在发生变化,我希望滚动条显示它们是否需要,而不显示它们是否不需要。

我知道这种TVS_NOHSCROLL风格,但我不能使用它。有时树视图包含比可用空间更宽的文本。有时不是。

我也想用TTreeView又不想用虚拟树视图。并不是说我反对虚拟树视图,只是我的应用程序当前正在使用TTreeView.

4

1 回答 1

17

很简单,使用TreeView1.Items.BeginUpdate/EndUpdate方法和滚动条会相应计算。

像这样:

...
 TreeView1.Items.BeginUpdate;
 // change your nodes here
 TreeView1.Items.EndUpdate
于 2012-10-02T19:24:02.523 回答