Текущий архив: 2005.11.06;
Скачать: CL | DM;
ВнизОптимальное использование TreeView Найти похожие ветки
← →
melbis © (2005-10-13 12:50) [0]Есть TreeView и есть обработчик его события OnChange
Интересует такой момент, если дерево на момент его очистки было не пустое, а содержало 1000 элементов скажем, то действие TreeView.Items.Clear вызывает 1000 событие OnChange!!!
Понятно, что можно исползовать флаг собственный, но как то оно не красиво... Пробовал TreeView.Items.BeginUpdate - не помогло...
Что скажите?
← →
Defunct © (2005-10-13 13:06) [1]> Что скажите?
var
TempHandler : TNotifyEvent;
....
with TreeView do
begin
TempHandler := OnChange;
OnChange := nil;
Clear;
OnChange := TempHandler;
end;
← →
Ega23 © (2005-10-13 13:06) [2]
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ComCtrls;
type
TForm1 = class(TForm)
TreeView1: TTreeView;
Label1: TLabel;
Button1: TButton;
Button2: TButton;
Label2: TLabel;
procedure TreeView1Change(Sender: TObject; Node: TTreeNode);
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure FillTree;
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.TreeView1Change(Sender: TObject; Node: TTreeNode);
begin
// if TreeView1.Tag=0 then Label1.Caption:=Node.Text
// else Label1.Caption:=IntToStr(TreeView1.Items.Count);
Label1.Caption:=Node.Text;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
FillTree;
end;
procedure TForm1.FillTree;
var
i:Integer;
begin
TreeView1.Tag:=0;
for i:=1 to 1000 do TreeView1.Items.Add(nil, IntToStr(i));
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
TreeView1.Tag:=1;
TreeView1.Items.BeginUpdate;
TreeView1.Items.Clear;
TreeView1.Items.EndUpdate;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
FillTree;
end;
end.
Всё отлично работает. Если убрать TreeView1.Items.BeginUpdate; и TreeView1.Items.EndUpdate; - то да, идёт останов на OnChange
← →
melbis © (2005-10-13 13:19) [3]
> Всё отлично работает. Если убрать TreeView1.Items.BeginUpdate;
> и TreeView1.Items.EndUpdate; - то да, идёт останов на
> OnChange
Не помогает TreeView1.Items.BeginUpdate - честное слово!
Добавьте Application.ProcessMessages после Label1.Caption:=Node.Text;
> OnChange := nil;
> Clear;
> OnChange := TempHandler;
То что надо, спасибо!
Страницы: 1 вся ветка
Текущий архив: 2005.11.06;
Скачать: CL | DM;
Память: 0.45 MB
Время: 0.04 c