Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.10.28;
Скачать: CL | DM;

Вниз

Работа с PageControl   Найти похожие ветки 

 
Dash Rendar   (2007-08-10 14:05) [0]

Доброго времени суток! Суть моей проблемы: есть PageControl с одной созданной в design-time страницей и набором контролов на ней. Подразумевается, что в процессе выполнения программы будут создаваться дополнительные страницы с тем же набором контролов, поэтому обработчик события OnClick я вынес в отдельную процедуру с последующим присваиванием.

Так вот, проблема в следующем: первая страница работает нормально, а последующие (которые создаются в run-time) обрабатывать присвоенное событие отказываются напрочь.
Привожу фрагменты кода.


//в описании формы
 private
   procedure Click(Sender: TObject);

//текст процедуры
procedure TForm1.Click(Sender: TObject);
begin
for i:=0 to ComponentCount-1 do
 if (Components[i] is TTreeView) and ((Components[i] as TTreeView).Parent=PageControl1.ActivePage)  then
  PageControl1.ActivePage.Caption:=(Components[i] as TTreeView).Selected.Text;
end;

//присваивание процедуры событию на заранее созданной странице, все работает
procedure TForm1.FormShow(Sender: TObject);
begin
TreeView1.OnClick:=Click;
end;

//создание новой страницы с новым TreeView
procedure TForm1.Action1Execute(Sender: TObject);
var ts: TTabSheet; tv: TTreeView;
begin
ts:=TTabSheet.Create(PageControl1);
ts.Parent:=PageControl1;
ts.PageControl:=PageControl1;
ts.ImageIndex:=0;

tv:=TTreeView.Create(ts);
ts.InsertControl(tv);
tv.Align:=alClient;
tv.OnClick:=Click;
end;


В чем моя ошибка?


 
MBo ©   (2007-08-10 14:12) [1]

>for i:=0 to ComponentCount-1 do
здесь ты перебираешь компоненты, принадлежащие форме

>tv:=TTreeView.Create(ts);
а здесь соз0даешь компонент, принадлежащий тАбу.

Впрочем, перебирать ничего и не нужно, т.к. Sender не зря передается в OnClick

еще одно - нехорошо называть метод Click, поскольку такой метод уже есть у TControl


 
Dash Rendar   (2007-08-10 14:22) [2]

То есть мне надо переписать примерно так?

>
procedure TForm1.Click(Sender: TObject);
begin
PageControl1.ActivePage.Caption:=(Sender as TTreeView).Selected.Text;
end;


Насчет названия метода - каюсь, забыл про TControl.


 
MBo ©   (2007-08-10 14:50) [3]

>То есть мне надо переписать примерно так?
Видимо, да. Проверки не помешают - Selected на Nil, а если этот обработчик может быть вызван и другими компонентами -  и   if Sender is TTreeView


 
Dash Rendar   (2007-08-10 14:52) [4]

Благодарю за помощь.



Страницы: 1 вся ветка

Текущий архив: 2007.10.28;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.036 c
6-1168705868
vidiv
2007-01-13 19:31
2007.10.28
сетевой select в INDY


15-1191493416
OrdJONY
2007-10-04 14:23
2007.10.28
Разработка протокола


1-1186031887
Раф
2007-08-02 09:18
2007.10.28
Как в чужом приложение на MessageDlg нажать Да


11-1175237504
Trible
2007-03-30 10:51
2007.10.28
PaintBox и GRushPanel


2-1191311223
Abcdef123
2007-10-02 11:47
2007.10.28
Поясните Пример кода на использование KeyPush.DLL