Visual studio переход между формами
Разработать демонстрационное приложение, осуществляющее вызов из главной формы второстепенной формы по схеме, изображенной на рис. 1. Приложение реализует взаимодействие между различными формами, которыми могут быть диалоговые окна любой сложности.
В главной форме Form1 разместить:
- элемент управления типа Label для вывода результата возврата из второстепенной формы;
- элемент управления типа Button для вызова второстепенной формы.
Во второстепенной форме Form2 разместить:
- элемент управления типа Label для вывода заголовка формы;
- два элемента управления типа Button для обеспечения подтверждения или неподтверждения выбора (действия) во второстепенной форме.
Рис. 1. Схема взаимодействия между формами
⇑
Выполнение
1. Создать приложение типа Windows Forms Application
Запустить Microsoft Visual Studio 2010 . Пример создания нового приложения типа Windows Forms Application подробно описывается здесь.
Сохранить проект в произвольной папке.
Рис. 2. Главная форма приложения Form1
⇑
2. Разработка главной формы приложения
Из палитры элементов управления Toolbox выносим на форму:
- элемент управления типа Button ;
- элемент управления типа Label .
Рис. 3. Главная форма приложения после внесенных изменений
⇑
3. Создание второстепенной формы
Способ 1.
Для добавления формы №2 в проект этим способом нужно вызвать команду (рис. 4)
Рис. 5. Окно добавления новой формы к проекту
Способ 2.
Также новую форму можно добавить к проекту с помощью соответствующей команды из контекстного меню (рис. 7).
Последовательность действий следующая:
Рис. 7. Добавление новой формы из Solution Explorer
В результате откроется точно такое же окно как на рисунке 5.
⇑
4. Разработка второстепенной формы
Следующим шагом есть разработка второстепенной формы. Используя средства панели инструментов Toolbox создаем второстепенную форму Form2 как показано на рисунке 8. Такое построение формы соответствует условию задачи. Таким же образом, на Form2 имеем элементы управления label1 , butto1 , button2 .
Рис. 8. Второстепенная форма Form2
⇑
5. Программирование событий клика на кнопках OK и Cancel формы Form2
Программируем событие клика на кнопке OK . Подробный пример программирования события клика на кнопке OK описывается здесь.
⇑
6. Вызов формы Form2 из главной формы приложения
Программный код обработчика события будет иметь следующий вид:
В листинге, приведенном выше, сначала создается экземпляр класса типа Form2 . В операторе условного перехода if осуществляется вызов диалогового окна формы Form2 с помощью строки
Листинг всего программного кода формы Form1 следующий
⇑
7. Выполнение приложения
После выполненных действий можно выполнять приложение и исследовать его работу.
БлогNot. Visual C++: из формы в форму
Visual C++: из формы в форму
Несмотря на то, что моё мнение о микрософтовском Visual Studio по-прежнему остаётся невысоким, иногда приходится что-то делать и на нём. Если смириться с тем, что пишем мы при этом, собственно, не на C++, а на так называемом C++/CLI, работа с привычными визуальными компонентами будет не так уж сильно отличаться от тех же Борландовских сред. А вот взаимодействие форм и модулей способно, по сравнению с Builder'ом, создать проблемы. Рассмотрим 3 типовых ситуации работы с приложением, содержащим больше одной формы. Среда примера - бесплатная Visual C++ 2010 Express, предполагается, что главная форма имеет имя по умолчанию Form1 .
Пример конструирования и программного вызова формы
Этот код можно выполнить, например, по нажатию кнопки в главной форме Form1.
Для добавления обработчика нажатия программно сгенерированной кнопки button2 достаточно перед последней строкой кода написать:
- до того, как будет вызван метод form2->ShowDialog() или form2->Show();
При этом код обработчика размещён в текущем модуле Form1.h :
Вызвать другую форму из главной формы
В меню выберем Проект - Добавить новый элемент - Форма - имя Form2
перед первым namespace в Form1.h (то есть, в самое начало файла).
Включим указатель на экземпляр класса в секцию public класса Form1 :
Добавим код там, где нужно создать и вызвать вторую форму:
Для программного удаления второй формы подойдёт код
Следует учесть, что указатель хранит адрес только одной формы, той, что создана последней. Если мы последовательно создали таким кодом несколько форм, удалена будет только последняя из них. Как вариант попробуйте массив форм, описанный ниже.
Опишем нужные данные в классе формы Form1 (здесь имя и namespace проекта Tabulator , если нужно, замените на своё):
Потом инициализируем данные по событию Load главной формы:
Затем реализуем код для создания очередной формы
Если мы хотим создавать дочерние формы не отдельно, а внутри родительской формы, то в свойствах Form1 нужно указать, что она "предок" (установить свойство IsMdiParent = true ), а перед показом дочерней формы оператором F2[FormCount-1]->Show() пометить её как потомка Form1:
Вызвать из дочерней формы метод родительской формы
Нам едва ли обойтись без привлечения файлов .cpp, что неплохо - писать код в файлах .h правильного Си'шника вообще ломает :)
Распишем процесс по шагам.
1) Имеются 2 формы - Form1 и Form2 , на Form1 располагаются Button ( button1 , будет открывать вторую форму) и Label ( label1 , здесь будем менять текст). На Form2 - button1 , по нажатию на которую будет происходить смена текста в label1 .
2) Так как нам из первой формы нужно иметь доступ ко второй, а из второй к первой, то будет возникать проблема перекрестных ссылок (когда Form1.h ссылается на Form2.h , который, в свою очередь, опять ссылается на Form1.h ). Для того, чтобы этого избежать, код первой формы ( Form1 ), который будет иметь доступ ко второй форме ( Form2 ), мы вынесем из .h-файла в .cpp файл. Таким образом нужно создать файл Form1.cpp .
4) В файле Form2.h подключаем Form1.h (в начале):
и создаем конструктор, который будет принимать и сохранять ссылку на первую форму для дальнейшего использования: //ниже сразу ниже можно прописать ссылку: private: Form1^ parentForm;
5) По клику кнопки в Form2 будем вызывать метод Set родительской формы:
6) Осталось в первой форме сделать открытие второй формы. Для этого из Form1.h обработчик нажатия кнопки переносим в Form1.cpp , а в .h-файле оставляем только его объявление.
Код в файле Form1.cpp :
В Form1.h вставляем только строку:
На этом все. Можно скомпилировать и проверить проект, архив во вложении:
Наладить взаимодействие двух форм
На самом деле, просто развитие идеи. Здесь первая форма умеет передавать данные в текстовое поле второй и наоборот. Теперь они друг друга не "прячут", так что можно создать и много экземпляров второй формы.
Это пошаговое руководство содержит инструкции по передаче данных из одной формы в другую. Используя таблицы Customers и Orders из Northwind, одна форма позволяет пользователям выбрать клиента, а вторая — заказы выбранного клиента. В этом пошаговом руководстве показано, как создать метод во второй форме, которая получает данные из первой формы.
Здесь демонстрируется всего один способ передачи данных между формами. Существуют и другие варианты передачи данных в форму, в том числе создание второго конструктора для получения данных или создание открытого свойства, которое можно задать с помощью данных из первой формы.
В данном пошаговом руководстве представлены следующие задачи.
создание нового проекта Windows Forms приложения .
Создание и настройка набора данных с помощью мастера настройки источника данных.
Выбор элемента управления, создаваемого на форме при перетаскивании элементов из окна Источники данных. Дополнительные сведения см. в разделе Установка элемента управления, создаваемого при перетаскивании из окна Источники данных.
Создание элемента управления с привязкой к данным с помощью перетаскивания элементов из окна Источники данных на форму.
Создание второй формы с сеткой для отображения данных.
Создание запроса адаптера таблицы для получения заказов определенного клиента.
Передача данных между формами.
Предварительные требования
в этом пошаговом руководстве используется SQL Server Express LocalDB и образец базы данных Northwind.
если у вас нет SQL Server Express LocalDB, установите его на странице загрузки SQL Server Expressили с помощью Visual Studio Installer. в Visual Studio Installer SQL Server Express LocalDB можно установить как часть рабочей нагрузки хранения и обработки данных или как отдельный компонент.
Установите учебную базу данных Northwind, выполнив следующие действия.
в Visual Studio откройте окно обозреватель объектов SQL Server . (SQL Server обозреватель объектов устанавливается как часть рабочей нагрузки хранения и обработки данных в Visual Studio Installer.) разверните узел SQL Server . щелкните правой кнопкой мыши экземпляр LocalDB и выберите создать запрос.
Откроется окно редактора запросов.
скопируйте скрипт Transact-SQL Northwind в буфер обмена. этот сценарий T-SQL создает базу данных Northwind с нуля и заполняет ее данными.
вставьте скрипт T-SQL в редактор запросов, а затем нажмите кнопку выполнить .
По истечении короткого времени выполнение запроса завершается и создается база данных Northwind.
создание проекта Windows Forms приложения
В Visual Studio в меню Файл выберите пункты Создать > Проект.
в средней области выберите тип проекта приложения Windows Forms .
Назовите проект пассингдатабетвинформс и нажмите кнопку ОК.
Создается проект PassingDataBetweenForms, который добавляется в Обозреватель решений.
Создание источника данных
Чтобы открыть окно Источники данных , в меню данные выберите команду отобразить источники данных.
В окне Источники данных выберите Добавить новый источник данных, чтобы запустить Мастер настройки источника данных.
На странице Выбор типа источника данных выберите элемент База данных и нажмите Далее.
На странице Выбор модели базы данных выберите Набор данных и нажмите кнопку Далее.
На странице Выбор подключения к данным выполните одно из следующих действий.
Если подключение к учебной базе данных Northwind доступно в раскрывающемся списке, то выберите его.
Выберите Новое подключение для открытия диалогового окна Добавить/изменить подключение.
Если базе данных требуется пароль и выбран параметр для включения конфиденциальных данных, выберите параметр и нажмите кнопку Далее.
На странице Сохранение подключения в файле конфигурации приложения нажмите кнопку Далее.
Разверните узел Таблицы на странице Выбор объектов базы данных.
Выберите таблицы Customers и Orders и нажмите кнопку Готово.
NorthwindDataSet добавляется в проект, и таблицы Customers и Orders отображаются в окне Источники данных.
Создание первой формы (Form1)
Вы можете создать сетку с привязкой к данным (элемент управления DataGridView) с помощью перетаскивания узла Customers из окна Источники данных на форму.
Создание сетки с привязкой к данным на форме
Перетащите главный узел Customers из окна Источники данных на форму Form1.
На форме Form1 появляется DataGridView и панель инструментов (BindingNavigator) для перемещения по записям. В области компонентов появляется NorthwindDataSet, CustomersTableAdapter, BindingSource и BindingNavigator.
Создание второй формы
Создайте вторую форму для передачи данных.
В меню Проект выберите пункт Добавить форму Windows.
Оставьте имя по умолчанию Form2 и нажмите кнопку Добавить.
Перетащите главный узел Orders из окна Источники данных на форму Form2.
На форме Form2 появляется DataGridView и панель инструментов (BindingNavigator) для перемещения по записям. В области компонентов появляется NorthwindDataSet, CustomersTableAdapter, BindingSource и BindingNavigator.
Удалите OrdersBindingNavigator из области компонентов.
OrdersBindingNavigator исчезает из Form2.
Добавление запроса TableAdapter
Добавление запроса TableAdapter в форму Form2 для загрузки заказов выбранного клиента на Form1.
Дважды щелкните файл NorthwindDataSet.xsd в обозревателе решений.
Щелкните правой кнопкой мыши элемент OrdersTableAdapter и выберите пункт Добавить запрос.
Оставьте параметр по умолчанию Использовать инструкции SQL и нажмите кнопку Далее.
Оставьте параметр по умолчанию Инструкция SELECT, возвращающая строки и нажмите кнопку Далее.
Добавьте в запрос предложение WHERE, чтобы возвратить Orders на основании CustomerID . Запрос должен выглядеть примерно следующим образом:
Проверьте правильность синтаксиса параметров для своей базы данных. Например, в Microsoft Access предложение WHERE должно выглядеть следующим образом: WHERE CustomerID = ? .
Щелкните Далее.
Для поля заполнить Дататаблемесод имя введите FillByCustomerID .
Снимите флажок Вернуть таблицу данных (DataTable) и нажмите кнопку Далее.
Создание метода на Form2 для передачи данных
Щелкните правой кнопкой мыши Form2 и выберите пункт Просмотреть код, чтобы открыть Form2 в редакторе кода.
Добавьте следующий код в Form2 после метода Form2_Load :
Создание метода на Form1 для передачи данных и показа Form2
В Form1 щелкните правой кнопкой мыши сетку данных клиентов и выберите пункт Свойства.
В окне Свойства выберите События.
Дважды щелкните событие CellDoubleClick.
Откроется окно редактора кода.
Обновите определение метода в соответствии со следующим примером:
Запустите приложение
Нажмите клавишу F5 для запуска приложения.
Дважды щелкните запись клиента в форме Form1, чтобы открыть Form2 с заказами этого клиента.
Дальнейшие действия
В зависимости от требований приложения существуют несколько шагов, которые, возможно, потребуется выполнить после передачи данных между формами. Ниже приводится перечень рекомендаций, позволяющих улучшить полученный результат.
Изменение набора данных для добавления или удаления объектов базы данных. Дополнительные сведения см. в разделе, посвященном созданию и настройке наборов данных.
Добавление функциональности для сохранения данных в базу данных. Дополнительные сведения см. в разделе Сохранение данных обратно в базу данных.
В моем приложении у меня есть четыре формы form1 form2 form3 form4. и каждая форма имеет две кнопки, то есть следующие и предыдущие кнопки для переключения между формами. и мой вопрос: как я могу переключаться между формами, не создавая новый экземпляр форм? ниже мой код
В приведенном выше коде я каждый раз создаю новые экземпляры форм . как я могу этого избежать и как я могу переключаться между формами без создания новых экземпляров форм . пожалуйста, помогите мне
Поскольку вы обращаетесь к своим формам последовательно, просто убедитесь, что вы используете метод Show, который назначает владельца созданной форме и назначает его переменной уровня класса после ее создания. Что-то вроде этого должно сработать для вас.
Просто удалите this.hide() в первой форме и [formNameHere].show(); во второй форме.
Я была такая же проблема. Мне нужно было приложение с множеством форм, и мне нужно было переключаться между формами вперед и назад без потери данных. Я придумал следующее решение, и оно сработало для меня.
В основном файле (Program.cs) напишите следующие два класса:
Первый класс используется для глобальных переменных, которые можно использовать в формах. Вы можете получить доступ к любой переменной:
Второй класс - это то место, где вы определяете новый экземпляр всех ваших форм. Вы можете скрыть и показать их где угодно во всех формах:
Это работает гладко и идеально подходит для меня. Попытайся.
Похоже, вы пытаетесь реализовать функцию мастера. Я бы рекомендовал иметь единую форму. Затем добавьте к нему настраиваемый элемент управления вкладками. Добавьте кнопки в форму, которая перемещается вперед и назад.
Чтобы настроить управление вкладками, вам нужно сделать следующее:
Этот элемент управления вкладками будет отображать только одну вкладку за раз. Хотя, во время разработки вы их все можете увидеть. Добавьте это и кнопки в свою форму. При нажатии кнопки просто установите свойство SelectedIndex этого элемента управления вкладкой.
Эта функция может использоваться, чтобы узнать, открыта ли форма уже или нет.
Вызовите IsFormAlreadyOpen(Form4) , если он возвращает истину, что означает, что Form4 уже открыта
И в вашем случае
В every forms constructor() создать следующий и предыдущий объект формы
И при нажатии кнопки вызывается IsFormAlreadyOpen (), чтобы узнать, открыта ли форма уже или нет, и если она уже открыта, просто выведите эту форму на передний план, иначе отобразите форму с помощью метода obj.show () и скрыть или закрыть родительскую форму
Вы можете проверить , существует интересующая форма, а если нет, создать ее:
Читайте также: