IPB

Welcome Guest ( Log In | Register )

 
Ответить в данную темуНачать новую тему
> дочерние формы в MDI
Гость_ЯЯЯ_*
post 16.8.2005, 8:23
Post #1





Guests






Как пробежаться по всем дочерним формам, образованным от конкретнй формы(FormWorksh, на которой лежит StringGrid1), а потом в нужной найденной обратиться к компоненту StringGrid1? Я делаю так:
Код
for(int j=0;j<MDIChildCount;j++){
if(MDIChildren[j]->Caption==ComboBox1->Items->Strings[ComboBox1->ItemIndex]){
for(int i=1;i<MDIChildren[j]->StringGrid1->ColCount;i++){
ListBox1->Items->Add(MDIChildren[j]->StringGrid1->Cells[i][0]);
                                                                                    }
                    }
                                                 }

Пишет что StringGrid не является членом TForm.
Перейти в начало страницы
 
+Цитировать сообщение
Гость_Adil_*
post 16.8.2005, 8:52
Post #2





Guests






Код
String FindCaption=ComboBox1->Items->Strings[ComboBox1->ItemIndex]);
for(int j=0, MdiCnt=MDIChildCount; j<MDiCnt; j++) {
  if(MDIChildren[j]->Caption==FindCaption) {
    TStringGrid *SG=static_cast<TFormWorksh*>(MDIChildren[j])->StringGrid1;
    //ключевая фраза: static_cast<TFormWorksh*>(MDIChildren[j])
    // TFormWorksh - имя класса твоих MDI-форм?, если нет - то замени :)
    ListBox1->Items->BeginUpdate();
    for(int i=1, ColCount=SG->ColCount; i<ColCount; i++)
       ListBox1->Items->Add(SG->Cells[i][0]);
    ListBox1->Items->EndUpdate();
    break;//?
  }
}
Перейти в начало страницы
 
+Цитировать сообщение
Гость_ЯЯЯ_*
post 16.8.2005, 9:08
Post #3





Guests






спасибо!
Перейти в начало страницы
 
+Цитировать сообщение
Гость_ЯЯЯ_*
post 16.8.2005, 10:01
Post #4





Guests






Расскажите пожалуйста как надо понимать код:
Код
static_cast<TFormWorksh*>(MDIChildren[j])
Перейти в начало страницы
 
+Цитировать сообщение
Гость_Adil_*
post 16.8.2005, 10:24
Post #5





Guests






Мы просто "насильственным" образом "говорим" компилятору, что надо считать указатель на TForm (TForm *MDIChildren[j]) указателем на объект класса TFormWorksh. Это практическии равносильно старому Си-шному (без ++) приведению типа, т.е. можно было и так написать
((TFormWorksh*)MDIChildren[j])->StringGrid1.
Есстественно, так кастовать можно только будучи абсолютно уверенным, что по данному адресу на самом деле храниться указатель на объект данного типа (или его наследник).
Перейти в начало страницы
 
+Цитировать сообщение
Гость_ЯЯЯ_*
post 16.8.2005, 10:43
Post #6





Guests






Всё понятно. Спасибо большое.
Перейти в начало страницы
 
+Цитировать сообщение

Ответить в данную темуНачать новую тему

 



Lo-Fi Version Time is now: 21.8.2018, 23:21