PageControl에서 TabSheets로 작업하고 해당 표시 여부를 제어 할 때 이상한 동작을 극복했습니다. 간단한 예를 들어, 폼에 PageControl을 추가하고 해당 PageControl에 두 개의 TabSheet를 추가하고 각 TabSheet에 Label을 추가 한 다음 Forms OnCreate 이벤트를 할당하십시오.TabSheet에 이상한 문제가 있음
는 한 OnCreate의 코드와 같은 것입니다 :
procedure TForm1.FormCreate(Sender: TObject);
function Cond1: Boolean;
begin
result := 1=1;
end;
function Cond2: Boolean;
begin
result := 2=2;
end;
begin
TabSheet1.Visible := Cond1;
TabSheet1.TabVisible := Cond1;
if not (Cond1) then
if PageControl1.ActivePage = TabSheet1 then
PageControl1.ActivePage := TabSheet2;
TabSheet2.Visible := Cond2;
TabSheet2.TabVisible := Cond2;
if not(Cond2) then
if PageControl1.ActivePage = TabSheet2 then
PageControl1.ActivePage := nil;
ShowMessage(IntToStr(PageControl1.ActivePageIndex));
//PageControl1.ActivePage.BringToFront; //uncomment to work properly
end;
당신이 볼 수 있듯이, 활성 페이지는 여전히 TabSheet1이지만, TabSheet2의 내용이 표시됩니다. BringToFront를 사용하면 모든 것이 예상대로 작동하지만 이것은 나에게 상당히 이상하게 보입니다.
아마도 이러한 PageControl을 사용하여 이러한 가시성을 제어하는 더 좋은 방법이 있습니까?
PS : 나는 VCL을 사용하고,
저는 페이지 컨트롤을 사용하여 작업 해본 결과 Tabsheet.visible, tabheet.Tabvisible을 사용하지 않았습니다. Cond1과 Cond2 모두 위의 내용을 true로 반환하므로 사용자가 의도 한 바가 확실하지 않습니다. 둘 다 숨겨 지거나 항상 표시되는 경우가 있습니까? – MikeD
간단한 예제를 제공하려고 했으므로 실제 코드 Cond1과 Cond2에서 true 또는 false가 될 수 있으며 좀 더 복잡합니다. 그럼에도 불구하고 Tabsheet없이 작동합니다 .Visible 및 올바른 컨텐츠를 보여줍니다. 따라서이 문제를 해결해야합니다. –