Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Сделать невидимой главную форму


Автор: Нитонисе 15.2.2010, 04:03
Запускаю форму из главной (там главное меню - набор кнопок, открывающих те или иные формы) и хотелось бы чтобы главная форма при этом становилась невидимой. Однако написать команду FMain->Visible = false, билдер почему-то не разрешает (в обработчике нажатия на кнопку, запускающую другую форму).
Как скрыть главную форму?

Автор: Dem_max 15.2.2010, 05:43
Ну не знаю у меня все работает:

Код

void __fastcall TForm1::Button1Click(TObject *Sender)
{
   Form1->Visible = false;
   Form2 = new TForm2(this);
   Form2->ShowModal();
   delete Form2;
   Form1->Visible = true;
}
//---------------------------------------------------------------------------


Автор: vikaz 15.2.2010, 06:24
Скрыть:
Код

Form1->Hide();

Показать:
Код

Form1->Show();

Автор: smoke_man 15.2.2010, 08:42
Можно еще так:
Код

Application->ShowMainForm = false;
Form1->Visible = false;

Автор: Нитонисе 15.2.2010, 16:34
Не понимаю в чем дело.
Я разрабатывал форму FMain. Затем решил что она не будет главной в моем проекте, а будет запускать из другой. Добавил в проект форму FMenu и сделал ее главной в опциях проекта. Теперь у меня обе формы создаются при запуске приложения. FMenu - видима, FMain  - нет.
Далее я размещаю кнопку на FMenu. Вот обработчик ее нажатия.
Код

void __fastcall TFMenu::Button1Click(TObject *Sender)
{
FMain->ShowModal();
}

А вот вставить перед этой командой команду FMenu->Visible = false - не удается. В билдере после ввода символа "->" выпадает список возможных свойств и методов, так вот Visible среди них нет. И Hide тоже нет.
Команда Application->ShowMainForm = false; вводится, но не работает. Главная форма остается видимой.

Автор: artsb 15.2.2010, 18:29
Цитата(Нитонисе @  15.2.2010,  16:34 Найти цитируемый пост)
так вот Visible среди них нет. И Hide тоже нет.

Ну и что? smile Пиши и всё.

Цитата(Нитонисе @  15.2.2010,  16:34 Найти цитируемый пост)
Команда Application->ShowMainForm = false; 

Это тебе точно не нужно  smile

Добавлено через 4 минуты и 12 секунд
Цитата(Нитонисе @  15.2.2010,  16:34 Найти цитируемый пост)
А вот вставить перед этой командой команду FMenu->Visible = false - не удается.

А если просто :
Код

Visible = false;

или
Код

this->Visible = false;

?
Указатель FMenu вы не удаляли?

Автор: Нитонисе 15.2.2010, 19:36
Код

this->Visible = false;

Вот это сработало.

Но теперь мне нужно при закрытии второстепенной формы снова отобразить главную. Привычные методы FMenu->Show() или FMenu->Visible=true - не работают. Компилятор вот такую выдает ошибку например на методе Show().

[C++ Error] UStat.cpp(1045): E2247 'TCustomForm::FMenu' is not accessible
[C++ Error] UStat.cpp(1045): E2247 'TCustomForm::FMenu' is not accessible
[C++ Error] UStat.cpp(1045): E2316 'Show' is not a member of 'TMainMenu'

Автор: vikaz 16.2.2010, 07:29
Так нужно?

Автор: Dem_max 16.2.2010, 08:06
Еще вот 

Автор: artsb 16.2.2010, 09:44
Цитата(Нитонисе @  15.2.2010,  19:36 Найти цитируемый пост)
[C++ Error] UStat.cpp(1045): E2247 'TCustomForm::FMenu' is not accessible
[C++ Error] UStat.cpp(1045): E2247 'TCustomForm::FMenu' is not accessible

FMenu - это точно указатель на форму? Вы его не удалили и не перепутали с чем-то другим?

Цитата(Нитонисе @  15.2.2010,  19:36 Найти цитируемый пост)
[C++ Error] UStat.cpp(1045): E2316 'Show' is not a member of 'TMainMenu' 

Судя по всему, вы пытаетесь вызвать метод TMainMenu Show, которого просто нет. Опять прочитайте мой вопрос выше.

Автор: Нитонисе 16.2.2010, 21:05
Цитата(artsb @  16.2.2010,  09:44 Найти цитируемый пост)
FMenu - это точно указатель на форму? Вы его не удалили и не перепутали с чем-то другим?

Это точно указатель на форму. Я такое имя дал главной форме.

Вот что интересно, создаю новое приложение - там все работает. Форма и скрывается и появляется. Все методы работают. А в моем приложении - не работает. Тут вот такая предыстория была. Я начал проектировать программу и главной формой была та, котороую потом я решил сделать второстепенной. То есть я добавил в проект новую форму и именно ее сделал главной. Так вот может в модулях бывшей главной формы осталась какая-то информация, которую надо было поправить? Я ж ее ко всему прочему переименовал. Была FMain, стала FStat. А главной форме дал имя FMenu. Все функции дочерней и главной форм работают, а вот отобразить из дочерней главную - не могу.

Автор: artsb 16.2.2010, 22:21
Цитата(Нитонисе @  16.2.2010,  21:05 Найти цитируемый пост)
Вот что интересно, создаю новое приложение - там все работает.

ИМХО вы что-то с указателями напутали. Делаю такой вывод хотя бы потому, что FMenu->Visible = false не работает, а this->Visible = false работает. Значит, либо указатель ссылается не на форму (это проверяется просто - если после ввода "->" отображаются какие-либо методы - указатель валидный, но ссылается не на форму), либо он битый.

Автор: Нитонисе 16.2.2010, 23:55
Вот ведь странно - поменял имя формы с FMenu на FMain - все стало работать!
Такое ощущение что имя FMenu конфликтует с чем-то.

Автор: artsb 17.2.2010, 00:01
Цитата(Нитонисе @  16.2.2010,  23:55 Найти цитируемый пост)
Такое ощущение что имя FMenu конфликтует с чем-то. 

Я это и пытался до тебя донести  smile 

Автор: Нитонисе 17.2.2010, 00:58
Цитата(artsb @  17.2.2010,  00:01 Найти цитируемый пост)
Я это и пытался до тебя донести

Интересно с чем  smile 

Автор: Noubpoeno 10.12.2022, 03:40
Модератор: Сообщение скрыто.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)