Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.47 MB
Время: 0.028 c
5-1107521160
Alex01
2005-02-04 15:46
2005.11.06
Edit


3-1126853678
ChILP
2005-09-16 10:54
2005.11.06
Проблема с Crystal Reports


14-1129181128
syte_ser78
2005-10-13 09:25
2005.11.06
Книга "советы программистов"


2-1129280012
Perf2k2
2005-10-14 12:53
2005.11.06
Подскажите новичку (насчет ТриВью и процедур)


14-1129491710
Paul__
2005-10-16 23:41
2005.11.06
В некоторых окнах увеличились шрифты (xp)