2010-12-13 3 views
2

У меня есть TPageControl, который имеет 3 TTabSheet и некоторые из них имеют дополнительную TPageControl, которые имеют TTabSheetКак выполнить некоторый код, когда пользователь переключается на вложенный вкладке?

Сортировать по

Page Control 1 
    TabSheet 1 
    TabSheet 2 
    Page Control 2 
     TabSheet 2a 
     TabSheet 2b 
    TabSheet 3 

Теперь, когда один из этих Tabsheets становится виден пользователю, я хочу, чтобы выполнить некоторый код, но я не уверен, какое событие зацепиться.

Например, если пользователь смотрит на TabSheet 1 и переходит в TabSheet 2 где TabSheet 2a показывает, то я хочу, чтобы выполнить код Tabsheet 2a, но я не могу подключить OnEnter Tabsheet 2а в или OnShow. И это не «OnChange» на странице Control2.

На самом деле, все, что я вижу, - это положить целую кучу коммутатора/футляра в событие OnChange для контроля над версией. Это лучший способ?

ответ

2

Я подключил каждую функцию OnChange() и проверял ActivePage. Он работает для меня, не переделывая использование фреймов.

+0

+1, использование фреймов было всего лишь предложением, ваше предложение OnChange также хорошее – ComputerSaysNo

4

Каждый вкладка TabSheet имеет событие «OnShow», которое запускается всякий раз, когда пользователь нажимает на него и делает его видимым, это должно делать трюк, однако с помощью pagecontrol внутри таблиц, который имеет другой pagecontrol как родительский и так далее, это довольно тяжелый пользовательский интерфейс, попробуйте использовать фреймы, которые вы создадите на событии OnShow вкладки, и уничтожьте событие OnHide на вкладке.

Редактировать: Если вы решите использовать TFrames внутри таблиц, перейдите в раздел «общедоступный» кадра, нажмите CTRL + SPACE и введите «create», чтобы вы переопределили конструктор «Создать» и повторили для «Уничтожьте», чтобы вы это переопределили.

+0

Errm, спасибо, но я предпочел бы просто пойти с ним так, как он есть, а не использование кадров .... – Mawg

+0

и я привел пример, когда пользователь не будет зализать на вкладке, но (это значит, что мой код должен его обновить), когда он нажимает на родительскую вкладку. – Mawg

+0

как почти как таблицы, так что вы можете повторно использовать его как «виды», единственной причиной, по которой я предложил фреймы, является то, что вы можете повторно использовать кадр в других частях приложения, но все это приходит вплоть до ваших потребностей и выбора дизайна, получайте удовольствие ;-) – ComputerSaysNo

1

Я старательно использую событие onEnter на таблицах. но я их только уволяю, когда фокус попадает в «таблет». поэтому я вручную установил фокус в таблицу, когда изменяется pagecontrol.

procedure TForm1.PageControl1Change(Sender: TObject); 
begin 
    pagecontrol1.ActivePage.SetFocus; 
end 
Смежные вопросы