2014-11-03 2 views
2

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을 사용하고,

+1

저는 페이지 컨트롤을 사용하여 작업 해본 결과 Tabsheet.visible, tabheet.Tabvisible을 사용하지 않았습니다. Cond1과 Cond2 모두 위의 내용을 true로 반환하므로 사용자가 의도 한 바가 확실하지 않습니다. 둘 다 숨겨 지거나 항상 표시되는 경우가 있습니까? – MikeD

+1

간단한 예제를 제공하려고 했으므로 실제 코드 Cond1과 Cond2에서 true 또는 false가 될 수 있으며 좀 더 복잡합니다. 그럼에도 불구하고 Tabsheet없이 작동합니다 .Visible 및 올바른 컨텐츠를 보여줍니다. 따라서이 문제를 해결해야합니다. –

답변

1

TabSheet1.VisibleTabSheet2.Visible, 그 과제 엉망 탭 가시성에 할당을 제거 Firemonkey 없습니다.

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)); 
end;