Как обратиться к компонентам на динамически созданных формах
Есть форма, на ней PageControl
на ней созданный динамически TabSheet и Memo
как мне из мемо, получить информацию, например
количество строк, весь текст сохранить.
вот кусок создания
TTabSheet *massiv_sheet[5];
TMemo *massiv_memo[5];
for(int i=0;i<5;i++){
massiv_sheet = new TTabSheet (pctrNoteBook);
massiv_sheet->PageControl = pctrNoteBook;
massiv_sheet->Name = "Note"+IntToStr(i);
massiv_sheet->Caption = "Запись "+IntToStr(i);
massiv_sheet->TabVisible=true;
massiv_sheet->Enabled=true;
massiv_memo = new TMemo(this->Handle);
massiv_memo->Name = "Memo"+IntToStr(i);
massiv_memo->Parent = massiv_sheet;
massiv_memo->Align = alClient;
pctrNoteBook->ActivePage=massiv_sheet[0];
Дано:
Есть форма, на ней PageControl
на ней созданный динамически TabSheet и Memo
как мне из мемо, получить информацию, например
количество строк, весь текст сохранить.
вот кусок создания
TTabSheet *massiv_sheet[5];
TMemo *massiv_memo[5];
for(int i=0;i<5;i++){
massiv_sheet = new TTabSheet (pctrNoteBook);
massiv_sheet->PageControl = pctrNoteBook;
massiv_sheet->Name = "Note"+IntToStr(i);
massiv_sheet->Caption = "Запись "+IntToStr(i);
massiv_sheet->TabVisible=true;
massiv_sheet->Enabled=true;
massiv_memo = new TMemo(this->Handle);
massiv_memo->Name = "Memo"+IntToStr(i);
massiv_memo->Parent = massiv_sheet;
massiv_memo->Align = alClient;
pctrNoteBook->ActivePage=massiv_sheet[0];
myMemo = massiv_memo[0];
myMemo->Lines->Append("Добавили эту строку в 1 memo");
myMemo = massiv_memo[0];
myMemo->Lines->Append("Добавили эту строку в 1 memo");
А если мне их 50 или 100 надо будет???
А если мне их 50 или 100 надо будет???
Ну так какая разница? А вообще каждая форма имеет массив, в котором хранятся указатели на все компоненты. Form1->Controls и Form1->ControlCount. При создании динамических компонент, чтобы правильно использовать эти возможность необходимо вызывать метод Form1->InsertControl(TContorl*) для каждого динамически созданного объекта.
Например:
TControl *ChildControl;
for (I = 0; I < Form1->ControlCount; I++)
{
ChildControl = Form1->Controls;
//Дальше делаем что нужно
}
Ну так какая разница? А вообще каждая форма имеет массив, в котором хранятся указатели на все компоненты. Form1->Controls и Form1->ControlCount. При создании динамических компонент, чтобы правильно использовать эти возможность необходимо вызывать метод Form1->InsertControl(TContorl*) для каждого динамически созданного объекта.
Например:
TControl *ChildControl;
for (I = 0; I < Form1->ControlCount; I++)
{
ChildControl = Form1->Controls;
//Дальше делаем что нужно
}
А если приглядеться, то у человека было так:
...
massiv_memo->Parent = massiv_sheet;
...
А если приглядеться, то у человека было так:
...
massiv_memo->Parent = massiv_sheet;
...
угу, я пока так делаю:
massiv_memo->Lines->LoadFromFile(ExtractFilePath(Application->ExeName)+"Note"+IntToStr(i)+".txt");
угу, я пока так делаю:
massiv_memo->Lines->LoadFromFile(ExtractFilePath(Application->ExeName)+"Note"+IntToStr(i)+".txt");
Я к тому, что Parent-ом для Мемо назначается не форма т.е. ходить по Form1->Controls бесполезно.
Я к тому, что Parent-ом для Мемо назначается не форма т.е. ходить по Form1->Controls бесполезно.
А додумать самому. Почитать хелпы и выяснить откуда ноги растут слабо? Вот пример без массивов:
void __fastcall TForm1::FormCreate(TObject *Sender)
{
for(int i=0;i<5;i++){
TTabSheet* newSheet = new TTabSheet (PageControl1);
newSheet->PageControl = PageControl1;
newSheet->Name = "Note"+IntToStr(i);
newSheet->Caption = "Çàïèñü "+IntToStr(i);
newSheet->TabVisible=true;
newSheet->Enabled=true;
PageControl1->InsertControl(newSheet);
TMemo* newMemo = new TMemo(this->Handle);
newMemo->Name = "Memo"+IntToStr(i);
newMemo->Parent = newSheet;
newMemo->Align = alClient;
newSheet->InsertControl(newMemo);
PageControl1->ActivePage=(TTabSheet*)PageControl1->Controls[0];
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
for(int i=0;i<5;i++)
{
TTabSheet* mySheet = (TTabSheet*)PageControl1->Controls;
TMemo* myMemo = (TMemo*)mySheet->Controls[0];
myMemo->Lines->Add("Ïðèâåò "+IntToStr(i));
}
}
//---------------------------------------------------------------------------
Это кому?
Это кому?
Это не тебе. Машинально нажал на кнопочку ответить, вот цитатка и влезла.