2015-10-29 4 views
0

я создаю Tabsheets динамически во время выполнения программы и помещен кадр внутри него, используя этот код:Как проверить, если Tabsheet уже созданы в TPageControl

procedure TForm1.Button2Click(Sender: TObject); 
var 
    TabSheetG: TTabSheet; 
begin 
    TabSheetG := TTabSheet.Create(PageControl1); 
    TabSheetG.Caption := 'Tab Sheet green '; 
    TabSheetG.PageControl := PageControl1; 
    Frame3 := TFrame3.Create(nil); 
    Frame3.Parent := TabSheetG; 
    Frame3.Show; 
end; 

и теперь я хочу, чтобы знали, если вкладка уже и просто активировать его, когда я нажимаю на ту же кнопку.

ответ

2

Добавить приватную переменную типа TTabSheet в свой класс.

type 
    TForm1 = class(TForm) 
    .... 
    private 
    FMyTabSheet: TTabSheet; 
    end; 

Он будет автоматически инициализирован до nil.

В обработчике событий OnClick проверьте, является ли переменная nil. Если нет, создайте таблицу, иначе используйте существующую таблицу.

procedure TForm1.Button1Click(Sender: TObject); 
begin 
    if not Assigned(FMyTabSheet) then 
    FMyTabSheet := TTabSheet.Create(PageControl1); 
    FMyTabSheet.PageControl := PageControl1; 
    ... etc. 
    end; 
    PageControl1.ActivePage := FMyTabSheet; 
end; 
+0

Спасибо, это отличное решение, но как вы думаете, это функционально, если я получил 30 кадров, используя 30 TabSheet? – HamzaGeeK

+1

Да, он будет масштабироваться просто отлично. Возможно, вы захотите объявить перечислимый тип для 30 разных страниц. Затем создайте массив вкладок и фреймов, индексированных этим перечисляемым типом. –

+0

Хорошо, спасибо, это кажется хорошим – HamzaGeeK

 Смежные вопросы

  • Нет связанных вопросов^_^