С предыдущей задачей вы не справились, переходим к следующей.
Задача 2.
Я создал стандартный проект в Visual Basic .Net с формой. Поработал с ней.
На форме кончилось место, и я решил создать вторую форму. На первой форме я сделал кнопку, которая закрывает первую форму.
Как мне запустить вторую форму?
Лично я решения этой задачи не вижу. А оно есть.
Приложение вызывает форму F1 и передает ей ее саму. Поэтому я смог закрыть форму F1. Но ссылку на F2 не дает, форма F1 ничего не знает о F2.
F2 может быть вызвано приложением, но приложение тоже закрывается после закрытия F1.
В данный момент можно лишь написать второе приложение для второй формы. А вот в Visual Basic 5.0 такой проблемы не было.
Присоединяйтесь — мы покажем вам много интересного
Присоединяйтесь к ОК, чтобы подписаться на группу и комментировать публикации.
Комментарии 61
Если бы ты читал внимательно подходящую литературу, то понял что в приложении с формами, обязательно имеется одна главная форма. Ее закрытие приводит к закрытию всего приложения.
Так же, главную форму можно переназначить во время работы.
В функцию майн лезть не нужно, если вы не уверены в том что делаете. Окна работают через события, которые вы и должны обрабатывать. В 90% приложений не требуется вмешиваться в цикл сообщений.
Окна имеют метод Close для закрытия и Hide для прятанья без закрытия.
Если у вас кончилось место, это не значит что нужно другое окно делать. Это значит что вы корявый интерфейс сделали. Для борьбы с нехваткой места, есть куча компонентов. Например PageControl.
dim a as new F2 ()
a.show ()
, после чего на экране появляется вторая форма. Для закрытия приложения нужно закрыть сначала одну форму, потом вторую.
Буду теперь работать со второй формой.
Наткнулся на него чисто случайно.
Именно эта строка назначает форму главной.
Но современные концепции предполагает другую работу с окнами. Есть главная окно, и есть диалоги.Вы может встраивать в главное окно всякие элементы управления кнопки, таблицы и пр. При чем окно это может быть многостраничным, если все не вмещается. Диалоги вызываются по мере необходимости. Например, на главной форме у вас расположена таблица - список сотрудников. Если вы дважды кликните по одному из сотрудников, то откроется диалог редактирования - тут будет полная анкета на сотрудника. При этом главная форма будет не доступна, пока вы не закроете окно редактирования. Можно сделать и так, что бы главная форма была доступна - от задачи зависит.
Я же не читаю сейчас книжку по Visual Basic .Net, а всего лишь книжку по информатике за 1986-ой год. А книжку использую для справки, когда ничего не помогает, даже встроенный HELP.
1. Application.Exti()
2. Form1.Close()
Форма - это только часть приложения. Она просто не видима, но она работает. Потому вы просто можете вызвать ее метод Close и она закроет приложение.
Само ядро приложения, это объект Application - он командует всеми формами. Потому он и управляет приложением. У него есть свой метод завершения приложения.
Вы прост не лезьте в функцию майн пока. Переносите кода в клики кнопок на форме. А потом, по мере опыта начнете понимать уже как можно делать иначе
Вот представьте, например у вас есть какой-то большой массив данных. Вам надо показать его в виде таблице и в виде графика.
Правильным решением будет две формы и один модуль данных. Каждая форма может запрашивать данные и показывать в своем виде, но сами формы эти данные не содержат. Эта концепция называется MVC - Model View Controller.
Model - содержит данные, она ничего не знает о том кто и как использует данные. Он их только хранит.
View - это форма. Она умеет только отображать данные совершенно не зная где из брать
Controller - эта штука рулит всем. Она знает что данные надо брать в Model и отдавать из в View.
Фишка в том, что если сделать таким образом, то ваша программа будет состоять из 3-х независ...Ещёфункцию майн не даром подальше убрали. В 90% программ в ней ничего делать не надо. Ну или минимум. Вся работа должна проходить в других частях. В самих формах тоже по нормальному логике быть не должно. Форма - это просто представление данных. А сами данные должны быть вне формы.
Вот представьте, например у вас есть какой-то большой массив данных. Вам надо показать его в виде таблице и в виде графика.
Правильным решением будет две формы и один модуль данных. Каждая форма может запрашивать данные и показывать в своем виде, но сами формы эти данные не содержат. Эта концепция называется MVC - Model View Controller.
Model - содержит данные, она ничего не знает о том кто и как использует данные. Он их только хранит.
View - это форма. Она умеет только отображать данные совершенно не зная где из брать
Controller - эта штука рулит всем. Она знает что данные надо брать в Model и отдавать из в View.
Фишка в том, что если сделать таким образом, то ваша программа будет состоять из 3-х независимых частей, каждую из которых вы можете менять. Например не понравилась вам форма - вы ее легко замените на другу, всего лишь пару строк кода.
Сообщения можно слать с помошью функции SendMessge.
Но вы лучше пока не леьзьте к сообщениям - это уже продвинутый уровень. Только запутаетесть.
Про сообщения я читал в Visual C++ 6.0, но сам я их не отсылал. У меня всё работало.
Да, еще вспомнил важную деталь. Виндовс вся состоит из окон. Например поле ввода Edit - это тоже окно. Это значит что у него тоже есть хендл и его можно получить и управлять. Даже в чужой программе. Но это специфической окно, потому некоторые сообщения для него не имеют смысла и игнорируются им. Например Edit не будет обрабатывать сообщение WM_CLOSE. Но вы можете получить/установить текст в него, опять же - это можно сделать в чужой программе. Раньше так пароли воровали скрытые за звездочками. Сейчас эту багу закрыли, и если вы используете стандартное поле для ввода пароля, то виндовс не позволит спереть пароль. Но в остальном вы в общем то можете порулить кнопками в чужом окне. Кнопки - тоже окна с точки зрения виндовс ...ЕщёНа самом деле, в большинстве программ и не требуется сообщения отправлять на прямую. Со времен VC++ 6, многое изменилось. Язык развивается. Эти сообщения обернуты в более удобные вещи. Но вы при желании можете спустится на низкий уровень и отправлять сообщения сами.
Да, еще вспомнил важную деталь. Виндовс вся состоит из окон. Например поле ввода Edit - это тоже окно. Это значит что у него тоже есть хендл и его можно получить и управлять. Даже в чужой программе. Но это специфической окно, потому некоторые сообщения для него не имеют смысла и игнорируются им. Например Edit не будет обрабатывать сообщение WM_CLOSE. Но вы можете получить/установить текст в него, опять же - это можно сделать в чужой программе. Раньше так пароли воровали скрытые за звездочками. Сейчас эту багу закрыли, и если вы используете стандартное поле для ввода пароля, то виндовс не позволит спереть пароль. Но в остальном вы в общем то можете порулить кнопками в чужом окне. Кнопки - тоже окна с точки зрения виндовс
Работа с окнами через хендл, это уже довольно низкий уровень через WinAPI. По сути, все функции это обертки на функциями виндовс. Т.е. все окна создаются не вашей программой, а самой виндовс. Ваша программа просто вызывает системные функции виндовс. Именно по этому все программы выглядят одинаково - одинаковые окна, кнопки поля ввод и пр. Стандартизация.
Использовал метод Text.Char ( n ) для получения символа и метод Text.Length для получения длины строки.
Остальные функции ищутся интуитивно. Согласно концепции ООП выражения для строковых переменных перегружены и пишутся так же, как для численных переменных. Я об этом не читал, я об этом догадался, потому что читал книжку по C++ для DOS.