![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Оптимальное использование TreeView [D7, WinXP]
melbis © (2005-10-13 12:50:00)Есть TreeView и есть обработчик его события OnChange
Интересует такой момент, если дерево на момент его очистки было не пустое, а содержало 1000 элементов скажем, то действие TreeView.Items.Clear вызывает 1000 событие OnChange!!!
Понятно, что можно исползовать флаг собственный, но как то оно не красиво... Пробовал TreeView.Items.BeginUpdate - не помогло...
Что скажите?
melbis (2005-10-13 13:19:00) [1]
> Всё отлично работает. Если убрать TreeView1.Items.BeginUpdate;
> и TreeView1.Items.EndUpdate; - то да, идёт останов на
> OnChange
Не помогает TreeView1.Items.BeginUpdate - честное слово!
Добавьте Application.ProcessMessages после Label1.Caption:=Node.Text;
> OnChange := nil;
> Clear;
> OnChange := TempHandler;
То что надо, спасибо!
Defunct (2005-10-13 13:06:00) [2]> Что скажите?
var
TempHandler : TNotifyEvent;
....
with TreeView do
begin
TempHandler := OnChange;
OnChange := nil;
Clear;
OnChange := TempHandler;
end;
Ega23 (2005-10-13 13:06:00) [3]
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