Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.55/40: Рейтинг темы: голосов - 40, средняя оценка - 4.55
1569 / 505 / 48
Регистрация: 04.04.2009
Сообщений: 1,891

Создание MainForm после успешной авторизации

22.04.2012, 00:46. Показов 8305. Ответов 56
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В общем застрял на следующем:
есть 4 формы:
MainForm, с которой происходит запуск Form2, Form3 и AuthForm, которая представляет собой форму авторизации.
Хочу, чтобы форма MainForm создавалась только после успешной авторизации (Button1Click() на AuthForm).

Итак, в Project -> Options -> Form в качестве Main form установил "AuthForm" и убрал из раздела Auto-create forms все остальные формы (MainForm, Form2, Form3).

На форме AuthForm пишу следующее:
C++
1
2
3
4
5
6
7
void __fastcall TAuthForm::Button1Click(TObject *Sender)
{
if (correctinfo) {
MainForm= new TMainForm(this);
MainForm->Show();
                    }
}
После чего вызывается создание формы MainForm:

C++
1
2
3
4
5
6
7
8
9
10
11
12
__fastcall TMainForm::TMainForm(TComponent* Owner)
    : TForm(Owner)
{
MainForm->ADOQuery1->FieldByName("id")->Visible=false;
 
for(int i=1890; i<2011; i++){
MainForm->ComboBox1->Items->Add(i);
}
for(int j=1890; j<2011; j++){
MainForm->ComboBox2->Items->Add(j);
}
}
Когда дело доходит до строчки:
C++
1
MainForm->ComboBox1->Items->Add(i);
выскакивает Debugger Exception Notification.

Такое ощущение, что ComboBox1 еще не создан, хотя вот на ADOQuery1 не ругается.
А и ComboBox1 и ADOQuery1 описаны:
C++
1
2
3
4
5
6
7
8
9
class TMainForm : public TForm
{
__published:    // IDE-managed Components
        .....
    TADOQuery *ADOQuery1;
    TComboBox *ComboBox1;
    TComboBox *ComboBox2;
        .....
};
Или проблема в другом...

Добавлено через 10 минут
Хм... Да нет, судя по Watch List'у ComboBox'ы создаются... Блин, а в чем тогда может быть проблема?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.04.2012, 00:46
Ответы с готовыми решениями:

Скрыть div после успешной авторизации
Все привет! В общем имеется код(смотрите ниже). Так вот, как сделать так, чтобы после успешнойавторизации форма входа скрывалась,...

Как сделать редирект на страницу после авторизации успешной?
Вопрос простой до безумия, тем более учитывая то, что у меня после авторизации уже выскакивает сообщение &quot;Успешно авторизованы&quot; ...

Скрыть форму входа на сайт, после успешной авторизации?
Как скрыть форму входа на сайт, после успешной авторизации??? И чтобы вместо входа стояла надпись &quot;Welcome, имя пользователя&quot;?? ...

56
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
10.06.2012, 18:11
Студворк — интернет-сервис помощи студентам
C++
1
2
3
4
5
else {
        Application->MessageBox(L"Зайдите позже!",L"Не в системе",MB_OK);
//        MainForm->Hide();
        MainForm->Close();
        Application->Terminate();
1
1569 / 505 / 48
Регистрация: 04.04.2009
Сообщений: 1,891
10.06.2012, 18:40  [ТС]
LK, все равно MainForm выскакивает

Да и
C++
1
2
MainForm->Close();
Application->Terminate();
особого смысла не имеет, т.к. при
C++
1
MainForm->Close();
- как раз и происходит
C++
1
Application->Terminate();
, т.к. MainForm - является главной формой...



Добавлено через 5 минут
Понимаете в чем проблема, я мог свою проверку вот эту:
Цитата Сообщение от The_Immortal Посмотреть сообщение
А вот на следующей форме, прежде чем ее показать (я делаю это на OnShow), происходит другая проверка (не суть важно какая
делать заранее, на форме авторизации. Но увы, не могу так делать, т.к. я потом к этой проверке должен обращаться. А так я просто вызываю событие OnShow, когда мне надо и все. Но вот этот глюк ужасно не нравится

Добавлено через 2 минуты
Или же просто делать эту проверку на не OnShow, а на другом событии... Но вопрос на каком именно? На каком событии (кроме OnCreate) не будет на долю секунды показываться текущая форма (при завершении приложения)?
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
10.06.2012, 19:00
происходит другая проверка (не суть важно какая
может, все же важно ? не оно ли не дает закрыть програму?
А Application и MainForm - это немного разные вещи, имхо.

Добавлено через 1 минуту
На каком событии (кроме OnCreate) не будет на долю секунды показываться текущая форма (при завершении приложения)?
да кто его знает, на какой форме что у вас творится .

Добавлено через 2 минуты
А так я просто вызываю событие OnShow, когда мне надо и все.
Вы не можете вызывать это событие, в отличие, например, от вызова нажатия кнопки, оно происход само при появлении формы, независимо от вашего желания, вы можете только что-нибудь сунуть в это событие.

Добавлено через 3 минуты
гм... это
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void __fastcall TMainForm::FormShow(TObject *Sender)
{
     wearehere = false;
 
     if (wearehere) {
           Application->MessageBox(L"Ура, мы в системе",L"В системе",MB_OK);
     }
     else {
        Application->MessageBox(L"Зайдите позже!",L"Не в системе",MB_OK);
        Application->Terminate(); //!!! здесь закрываем прогу, 
        //но форма MainForm все равно показывается на долю секунды, а не должна.
 
        //Close();
     }
}
вы пишете для главной формы при открытой и работающей еще какой-нибудь левой дочерней форме, я так понял? если так, то нечего удивляться, что появляется главная форма.
0
1569 / 505 / 48
Регистрация: 04.04.2009
Сообщений: 1,891
10.06.2012, 19:16  [ТС]
LK,


Цитата Сообщение от LK Посмотреть сообщение
да кто его знает, на какой форме что у вас творится .
В смысле "кто знает"? Я выложил кусок кода и проект "формы1" - они полностью отражают проблему.


Цитата Сообщение от LK Посмотреть сообщение
Вы не можете вызывать это событие
Интересно... А вот скажем следующая строчка что делает, не подскажите?
C++
1
this->FormShow(Sender);
Я имел в виду повторно вызывать, когда необходимо.


Цитата Сообщение от LK Посмотреть сообщение
вы пишете для главной формы при открытой и работающей еще какой-нибудь левой дочерней форме, я так понял? если так, то нечего удивляться, что появляется главная форма.
Да, верно поняли. Вы же сами мне посоветовали так сделать))). Изначально у меня данная форма была не главной и проблема все равно оставалась.
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
10.06.2012, 19:36
А написать все это в обработчик закрытия "еще какой-нибудь дочерней форме" не пробовали?

Добавлено через 31 секунду
Я не слежу за количеством и зависимостями ваших форм .
0
Я Фоюмчанин ? дааааа)
 Аватар для ivan.-94
213 / 204 / 23
Регистрация: 02.06.2012
Сообщений: 1,424
Записей в блоге: 12
10.06.2012, 23:34
Цитата Сообщение от The_Immortal Посмотреть сообщение
можете сразу запустить Win32\Release\Project1.exe, ввести корректные данные и увидите проблему:
У вас в коде небольшая шибка
C++
1
2
3
4
5
6
7
8
9
10
11
void __fastcall TMainForm::FormShow(TObject *Sender)
{
     if (wearehere) {
           Application->MessageBox(L"Ура, мы в системе",L"В системе",MB_OK);
     }
     else {
        Application->MessageBox(L"Зайдите позже!",L"Не в системе",MB_OK);
        Application->Terminate();
        //Close();
     }
}
Нужно
C++
1
if (!wearehere)
Иначе у вас вход никогда не произведёться.

Добавлено через 7 минут
Цитата Сообщение от The_Immortal Посмотреть сообщение
Сообщение от The_Immortal
Есть 2 проверки: одна (предварительная) происходит на форме авторизации (как у Вас) - проверяет корректность введенного логина и пароля. Если все ок, то ПЫТАЕМСЯ ПОКАЗАТЬ следующую форму. А вот на следующей форме, прежде чем ее показать (я делаю это на OnShow), происходит другая проверка (не суть важно какая, я просто флаг там поставил на неудачу), в зависимости от результатов которой надо показывать или не показывать эту форму.
Могу только это продублировать. Не знаю как еще объяснить.
Вы ввели логин пароль далее увас на форм1 проверяеться какоето условие и в зависимости от этого паказываеться форм1 или нет?
Если это так то я непонемаю зачем такой велосипед?
Ведь всё можно проверить в форме авторизации, или вы хотите переходя с любой другой формы на форм1 проверять определённые условия и отоброжать или неотоброжать?
1
1569 / 505 / 48
Регистрация: 04.04.2009
Сообщений: 1,891
11.06.2012, 00:56  [ТС]
ivan.-94,

Цитата Сообщение от ivan.-94 Посмотреть сообщение
Иначе у вас вход никогда не произведёться.
Ну что же Вы Это называется моделирование проблемы. Я так специально сделал.


Цитата Сообщение от ivan.-94 Посмотреть сообщение
Ведь всё можно проверить в форме авторизации
Увы, в моем случае нельзя. Потому что у меня проверка должна происходить именно на следующей форме, а не на форме авторизации...
0
Я Фоюмчанин ? дааааа)
 Аватар для ivan.-94
213 / 204 / 23
Регистрация: 02.06.2012
Сообщений: 1,424
Записей в блоге: 12
11.06.2012, 01:23
Цитата Сообщение от The_Immortal Посмотреть сообщение
Увы, в моем случае нельзя. Потому что у меня проверка должна происходить именно на следующей форме, а не на форме авторизации...
Раскажите свою задумку а то так как то пальцем в небо тыкать неполучиться
1
1569 / 505 / 48
Регистрация: 04.04.2009
Сообщений: 1,891
11.06.2012, 01:29  [ТС]
ivan.-94,
Цитата Сообщение от ivan.-94 Посмотреть сообщение
Раскажите свою задумку
Я не могу полностью посвятить в задачу, т.к. это слишком много информации.

Я просто ставлю перед фактом, что нужно именно так, а не иначе. А уж почему так и не иначе - это не столь важно на самом деле.
Завтра постараюсь представить проблему иначе и создам отдельную тему, а то тут уже каша начинается...
0
Я Фоюмчанин ? дааааа)
 Аватар для ivan.-94
213 / 204 / 23
Регистрация: 02.06.2012
Сообщений: 1,424
Записей в блоге: 12
11.06.2012, 01:32
Цитата Сообщение от The_Immortal Посмотреть сообщение
Завтра постараюсь представить проблему иначе и создам отдельную тему, а то тут уже каша начинается...
С этим я согласен.
1
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
11.06.2012, 01:38
создам отдельную тему,
Может лучше и проект заного начать писать
1
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
11.06.2012, 01:45
вот именно - четкую блок-схему нужного
1
1569 / 505 / 48
Регистрация: 04.04.2009
Сообщений: 1,891
11.06.2012, 01:56  [ТС]
Ребята... Вы чего-то многого хотите, не?
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
11.06.2012, 02:42
The_Immortal, хотите здесь как бы вы ? Все остальные не очень активно пытаются угадать .
1
1569 / 505 / 48
Регистрация: 04.04.2009
Сообщений: 1,891
11.06.2012, 02:53  [ТС]
LK,
Цитата Сообщение от LK Посмотреть сообщение
не очень активно
Во-во!

По сабжу: кажется невозможно это сделать (скрыть форму на событие OnShow, OnActivate и им подобным - она все равно будет показывать на долю секунды). Скрытие формы надо делать либо на OnCreate, либо заранее с другой формы. А более никак.

Так что можно считать, что проблему исчерпали Типа...

На самом деле, мне вас стало жалко и я решил отстать. Хотя... Я уж знаю сколько терпения у Avazart'а - он порою готов до самого утра траблы решать А уж про LK вообще молчу!

Но не в этот раз...

Усем спасибо, господа!
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
11.06.2012, 03:24
Просто у вас изначально неверный подход - делать ваши дела надо до показа главной формы и не в событиях главной фррмы, и это обсуждалось.

если при старте сделать форм2 - шоу, мейнформ - хайд/фолс, и потом терминировать апликатион - главной формы не может быть видно
0
1569 / 505 / 48
Регистрация: 04.04.2009
Сообщений: 1,891
11.06.2012, 20:47  [ТС]
LK,

Цитата Сообщение от LK Посмотреть сообщение
Просто у вас изначально неверный подход - делать ваши дела надо до показа главной формы и не в событиях главной фррмы
Согласен.


Цитата Сообщение от LK Посмотреть сообщение
если при старте сделать форм2 - шоу, мейнформ - хайд/фолс, и потом терминировать апликатион - главной формы не может быть видно
А можно уточнить "потом" это когда? Мне вот, например, это надо делать на OnShow мейнформ ну и соответственно мейнформ все равно показывается на долю секунды.
Таким образом, "потом" это не OnShow - так?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.06.2012, 20:47
Помогаю со студенческими работами здесь

Получение фото и имени пользователя после успешной авторизации Vk
Всем привет, у меня очередной вопрос, вот я сделал программу все отлично работает, Авторизирует на сайте Вконтакте ру. И мне хотелось бы...

Http запрос к Web-сервису после успешной авторизации
Привет всем! Нуждаюсь в помощи при создании правильного запроса. У меня клиент-приложение посылает запрос на Web-сервис, в результате в...

Как записать условие открытия второй формы после успешной авторизации в ВКонтакте?
Добрый день, у меня есть одна форма где пользователь вводит логин и пароль. Мне нужно чтобы открывалась вторая форма ЕСЛИ авторизация...

Как сделать, чтобы после успешной авторизации пропадала форма входа и выводилось нужное мне?
Написал простейшую регистрацию пользователя на пхп, теперь хочу сделать авторизицию, вроде как получилось, только теперь после нажатия на...

При успешной авторизации запустить другую форму
Здравствуйте специалисты. Не получается разобраться с кодом по авторизации. Необходимо соединиться с базой Users и при успешной авторизации...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
57
Ответ Создать тему
Новые блоги и статьи
1С: Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит значение перечислений. / / Событие "НачалоВыбора" реквизита на форме. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru