C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
MDI, Активизация открытой дочерней формы
Pan-SQL
Отправлено: 15.09.2005, 23:11


Не зарегистрирован







Здравствуйте коллеги! Очень необходима ваша помощь в решении следующей задачи? MDI приложение имеет 2 формы (Form1, Form2). Форма Form2 является дочерним окном, а форма Form1 соответственно главным. Главная форма содержит 2 кнопки (Button1 и Button2). Дочерняя форма содержит одну кнопку (Button1). Кнопка Button1 служит для открытия дочерней формы. Вот ее код:

TForm2 *f=new TForm2(Application);
if (!f) return;
f->Show();

Кнопка Button2 служит для активизации уже открытой дочерней формы. Вот ее код:

Form2->Visible=true;
Form2->Show();

Кнопка Button1 дочерней формы служит для активизации главной формы. Вот ее код:

Form1->SetFocus();

Form2 открывается с использованием функции CreateParams() и стилем окна WS_EX_APPWINDOW.

Проблема следующая: когда я пытаюсь активизировать уже открытую дочернюю форму путем нажатия на Button2 на главной форме, получаю исключение:
Access violation at address 00402CD6 in module. Read of address 00000000. Кто знает, подскажите. Заранее благодарен

olegenty
Отправлено: 16.09.2005, 06:39


Ветеран

Группа: Модератор
Сообщений: 2412



поотлаживай.
radiofun
Отправлено: 16.09.2005, 11:21


Ученик-кочегар

Группа: Участник
Сообщений: 20



Если я правильно понял то единствееный указатель на экземпляр класса
TForm2 ето f ,следовательно
ты не можешь обратится к дочерней форме как Form2 ,Надо так

Form1->MDIChildren[0]->Show();
Pan-SQL
Отправлено: 16.09.2005, 11:48


Не зарегистрирован







QUOTE (olegenty @ 16/09/2005, 06:39)
поотлаживай.

отлаживал. Ничего не получается.
Pan-SQL
Отправлено: 16.09.2005, 11:52


Не зарегистрирован







Если перименную TForm2 *f=new TForm2(Application); объявить как глобальную
radiofun
Отправлено: 16.09.2005, 12:38


Ученик-кочегар

Группа: Участник
Сообщений: 20



Если у тебя ТОЛЬКО одна дочерняя форма то можно обьявить указатель на неё в классе TForm1, иначе только через MDIChildren

Вернуться в Вопросы программирования в C++Builder