Оказалось что костыль не помог. Сообщение все равно появляется. Покопался отладчиком и вот что получается. Есть такой метод в файле
customform.inc Код: Выделить всё
procedure TCustomForm.SetActiveControl(AWinControl: TWinControl);
begin
if FActiveControl <> AWinControl then
begin
if (AWinControl<>nil) then
begin
if (AWinControl = Self) or
(GetParentForm(AWinControl) <> Self) or
not ((csLoading in ComponentState) or AWinControl.CanFocus) then
begin
DebugLn('TCustomForm.SetActiveControl ',DbgSName(Self),' AWinControl=',DbgSName(AWinControl),' GetParentForm(AWinControl)=',
DbgSName(GetParentForm(AWinControl)),' csLoading=',dbgs(csLoading in ComponentState),' AWinControl.CanFocus=',
dbgs((AWinControl<>nil) and AWinControl.CanFocus),' IsControlVisible=',dbgs((AWinControl<>nil) and AWinControl.IsControlVisible),
' Enabled=',dbgs((AWinControl<>nil) and AWinControl.Enabled));
{$IFDEF VerboseFocus}
RaiseGDBException(SCannotFocus);
{$ELSE}
raise EInvalidOperation.Create(SCannotFocus);
{$ENDIF}
end;
end;
{$IFDEF VerboseFocus}
DbgOut('TCustomForm.SetActiveControl ',Name,':',ClassName,' FActive=',DbgS(FActive));
if FActiveControl<>nil then
DebugLn(' OldActiveControl=',DbgSName(FActiveControl))
else
DebugLn(' OldActiveControl=nil');
if AWinControl<>nil then
DebugLn(' NewActiveControl=',DbgSName(AWinControl))
else
DebugLn(' NewActiveControl=nil');
{$ENDIF}
FActiveControl := AWinControl;
if ([csLoading, csDestroying] * ComponentState = []) then
begin
if FActive then
SetWindowFocus;
ActiveChanged;
end;
end;
end;
в нем и формируется мое злополучное ругательство.
Код: Выделить всё
raise EInvalidOperation.Create(SCannotFocus);
Замечено следующее поведение:
После того как я сделал
В приведенный выше метод приходит параметр
AWinControl имеющий правильное значение, т.е. контрол на которой должны фокусироваться на вкладке
PageIndex = 0. Ну, типа, зашибись! Активный контрол становится именно тот что нам нужно, вкладка та что нужно!... Но это не все! Дальше этот метод вызывается еще несколько раз, и один из них с параметром который указывает на контрол, который был активен до
Ну и получаем нафиг не нужный нам Exception. Т.к. активное окно уже другое и на нем этого контрола нет.
Люди добрые! ПОМОГИТЕ! Как
правильно переключиться на другую вкладку???? Я уже столько костылей перепрбовал - не помогает.