В идеальном мире вы должны установить AllowChange
на False
из события OnChanging
, чтобы заблокировать изменение страницы.Тем не менее, это не представляется жизнеспособным, потому что я не могу найти, в пределах OnChanging
способа, какую страницу пытается выбрать пользователь.
Даже просмотр базового уведомления Windows, кажется, мало что дает.надеюсь.Уведомление TCN_SELCHANGING
идентифицирует элемент управления, но ничего не говорит о задействованных страницах, насколько я могу судить.
Лучшее, что я могу придумать, это использовать OnChanging
, чтобы отметить текущую активную страницуа затем выполнить тяжелую работу в OnChange
.Если выбранная страница была изменена на что-то нежелательное, просто измените ее обратно.
procedure TForm1.PageControl1Changing(Sender: TObject; var AllowChange: Boolean);
begin
FPreviousPageIndex := PageControl1.ActivePageIndex;
end;
procedure TForm1.PageControl1Change(Sender: TObject);
begin
if PageControl1.ActivePageIndex=1 then begin
PageControl1.ActivePageIndex := FPreviousPageIndex;
Beep;
end;
end;
Довольно грязно, я знаю, но она имеет силу работы!