- Управление одной формой из другой
- 1-й способ. Передача ссылки в public переменную.
- 2-й способ. Передача ссылки в дочернюю форму.
- 3-й способ. Доступ ко всей родительской форме.
- Передача данных между формами Pass data between forms
- Предварительные требования Prerequisites
- Создание проекта Windows Forms приложения Create the Windows Forms app project
- Создание источника данных Create the data source
- Создание первой формы (Form1) Create the first form (Form1)
- Создание сетки с привязкой к данным на форме To create a data-bound grid on the form
- Создание второй формы Create the second form
- Добавление запроса TableAdapter Add a TableAdapter query
- Создание метода на Form2 для передачи данных Create a method on Form2 to pass data to
- Создание метода на Form1 для передачи данных и показа Form2 Create a method on Form1 to pass data and display Form2
- Запустите приложение Run the app
- Дальнейшие действия Next steps
Управление одной формой из другой
Иногда бывает нужно обратиться к элементам какой-то формы из другой в процессе выполнения программы. Например, есть форма Form1, из нее мы открываем другую Form2 и теперь, работая в форме Form2 нужно обратиться, получить доступ к элементам родительской формы Form1. Я нашел несколько способов как это сделать.
1-й способ. Передача ссылки в public переменную.
Перед открытием формы, передаем ссылку на нужный элемент в переменную public вызываемой формы.
В форме Form2 переменная, в которую передавали ссылку, будет теперь соответствовать кнопке button1 из формы Form1
2-й способ. Передача ссылки в дочернюю форму.
Суть примерна та же, то и в 1-м способе. При открытии формы Form2 передаем в нее ссылку на элемент, который планируем потом менять.
Теперь в форме Form2 нужно создать переменную, которая будет содержать ссылку на эту кнопку и через нее будем обращаться к кнопке на Form1 (строки 5,7,9 и 15).
3-й способ. Доступ ко всей родительской форме.
Чтобы осуществить это, нужно внести изменения в нескольких файлах, но зато при этом получим доступ ко всем элементам родительской формы и не нужно передавать ссылку на каждый элемент, как в 1-м способе.
Шаг 1. В файле Program.cs создаем публичную переменную f1 (строка 5).
Шаг 2. Открываем Form1.Designer.cs и в нем у элементов, к которым нужно будет обратиться из другой формы, меняем private на public . Например, сделаем доступной для изменений кнопку button1 на форме Form1.
Шаг 3. При создании формы Form1 присваиваем переменной f1 ссылку на эту форму (строка 7)
Передача данных между формами Pass data between forms
Это пошаговое руководство содержит инструкции по передаче данных из одной формы в другую. This walkthrough provides step-by-step instructions for passing data from one form to another. Используя таблицы Customers и Orders из Northwind, одна форма позволяет пользователям выбрать клиента, а вторая — заказы выбранного клиента. Using the customers and orders tables from Northwind, one form allows users to select a customer, and a second form displays the selected customer’s orders. В этом пошаговом руководстве показано, как создать метод во второй форме, которая получает данные из первой формы. This walkthrough shows how to create a method on the second form that receives data from the first form.
Здесь демонстрируется всего один способ передачи данных между формами. This walkthrough demonstrates only one way to pass data between forms. Существуют и другие варианты передачи данных в форму, в том числе создание второго конструктора для получения данных или создание открытого свойства, которое можно задать с помощью данных из первой формы. There are other options for passing data to a form, including creating a second constructor to receive data, or creating a public property that can be set with data from the first form.
В данном пошаговом руководстве представлены следующие задачи. Tasks illustrated in this walkthrough include:
Создание нового проекта Windows Forms приложения . Creating a new Windows Forms Application project.
Создание и настройка набора данных с помощью мастера настройки источника данных. Creating and configuring a dataset with the Data Source Configuration Wizard.
Выбор элемента управления, создаваемого на форме при перетаскивании элементов из окна Источники данных. Selecting the control to be created on the form when dragging items from the Data Sources window. Дополнительные сведения см. в разделе Установка элемента управления, создаваемого при перетаскивании из окна Источники данных. For more information, see Set the control to be created when dragging from the Data Sources window.
Создание элемента управления с привязкой к данным с помощью перетаскивания элементов из окна Источники данных на форму. Creating a data-bound control by dragging items from the Data Sources window onto a form.
Создание второй формы с сеткой для отображения данных. Creating a second form with a grid to display data.
Создание запроса адаптера таблицы для получения заказов определенного клиента. Creating a TableAdapter query to fetch orders for a specific customer.
Передача данных между формами. Passing data between forms.
Предварительные требования Prerequisites
В этом пошаговом руководстве используется SQL Server Express LocalDB и образец базы данных Northwind. This walkthrough uses SQL Server Express LocalDB and the Northwind sample database.
Если у вас нет SQL Server Express LocalDB, установите его на странице загрузки SQL Server Expressили с помощью Visual Studio Installer. If you don’t have SQL Server Express LocalDB, install it either from the SQL Server Express download page, or through the Visual Studio Installer. В Visual Studio Installer SQL Server Express LocalDB можно установить как часть рабочей нагрузки хранения и обработки данных или как отдельный компонент. In the Visual Studio Installer, SQL Server Express LocalDB can be installed as part of the Data storage and processing workload, or as an individual component.
Установите учебную базу данных Northwind, выполнив следующие действия. Install the Northwind sample database by following these steps:
В Visual Studio откройте окно Обозреватель объектов SQL Server . In Visual Studio, open the SQL Server Object Explorer window. (Обозреватель объектов SQL Server устанавливается как часть рабочей нагрузки хранения и обработки данных в Visual Studio Installer.) Разверните узел SQL Server . (SQL Server Object Explorer is installed as part of the Data storage and processing workload in the Visual Studio Installer.) Expand the SQL Server node. Щелкните правой кнопкой мыши экземпляр LocalDB и выберите создать запрос. Right-click on your LocalDB instance and select New Query.
Откроется окно редактора запросов. A query editor window opens.
Скопируйте скрипт Transact-SQL Northwind в буфер обмена. Copy the Northwind Transact-SQL script to your clipboard. Этот сценарий T-SQL создает базу данных Northwind с нуля и заполняет ее данными. This T-SQL script creates the Northwind database from scratch and populates it with data.
Вставьте скрипт T-SQL в редактор запросов, а затем нажмите кнопку выполнить . Paste the T-SQL script into the query editor, and then choose the Execute button.
По истечении короткого времени выполнение запроса завершается и создается база данных Northwind. After a short time, the query finishes running and the Northwind database is created.
Создание проекта Windows Forms приложения Create the Windows Forms app project
В Visual Studio в меню Файл выберите пункты Создать > Проект. In Visual Studio, on the File menu, select New > Project.
В левой области разверните элемент Visual C# или Visual Basic , а затем выберите пункт Windows Desktop. Expand either Visual C# or Visual Basic in the left-hand pane, then select Windows Desktop.
В средней области выберите тип проекта приложения Windows Forms . In the middle pane, select the Windows Forms App project type.
Назовите проект пассингдатабетвинформс и нажмите кнопку ОК. Name the project PassingDataBetweenForms, and then choose OK.
Создается проект PassingDataBetweenForms, который добавляется в Обозреватель решений. The PassingDataBetweenForms project is created, and added to Solution Explorer.
Создание источника данных Create the data source
Чтобы открыть окно Источники данных , в меню данные выберите команду отобразить источники данных. To open the Data Sources window, on the Data menu, click Show Data Sources.
В окне Источники данных выберите Добавить новый источник данных, чтобы запустить Мастер настройки источника данных. In the Data Sources window, select Add New Data Source to start the Data Source Configuration wizard.
На странице Выбор типа источника данных выберите элемент База данных и нажмите Далее. Select Database on the Choose a Data Source Type page, and then click Next.
На странице Выбор модели базы данных выберите Набор данных и нажмите кнопку Далее. On the Choose a database model page, verify that Dataset is specified, and then click Next.
На странице Выбор подключения к данным выполните одно из следующих действий. On the Choose your Data Connection page, do one of the following:
Если подключение к учебной базе данных Northwind доступно в раскрывающемся списке, то выберите его. If a data connection to the Northwind sample database is available in the drop-down list, select it.
Выберите Новое подключение для открытия диалогового окна Добавить/изменить подключение. Select New Connection to launch the Add/Modify Connection dialog box.
Если базе данных требуется пароль и выбран параметр для включения конфиденциальных данных, выберите параметр и нажмите кнопку Далее. If your database requires a password and if the option to include sensitive data is enabled, select the option and then click Next.
На странице Сохранение подключения в файле конфигурации приложения нажмите кнопку Далее. On the Save connection string to the Application Configuration file page, click Next.
Разверните узел Таблицы на странице Выбор объектов базы данных. On the Choose your Database Objects page, expand the Tables node.
Выберите таблицы Customers и Orders и нажмите кнопку Готово. Select the Customers and Orders tables, and then click Finish.
NorthwindDataSet добавляется в проект, и таблицы Customers и Orders отображаются в окне Источники данных. The NorthwindDataSet is added to your project, and the Customers and Orders tables appear in the Data Sources window.
Создание первой формы (Form1) Create the first form (Form1)
Вы можете создать сетку с привязкой к данным (элемент управления DataGridView) с помощью перетаскивания узла Customers из окна Источники данных на форму. You can create a data-bound grid (a DataGridView control), by dragging the Customers node from the Data Sources window onto the form.
Создание сетки с привязкой к данным на форме To create a data-bound grid on the form
Перетащите главный узел Customers из окна Источники данных на форму Form1. Drag the main Customers node from the Data Sources window onto Form1.
На форме Form1 появляется DataGridView и панель инструментов (BindingNavigator) для перемещения по записям. A DataGridView and a tool strip (BindingNavigator) for navigating records appear on Form1. В области компонентов появляется NorthwindDataSet, CustomersTableAdapter, BindingSource и BindingNavigator. A NorthwindDataSet, CustomersTableAdapter, BindingSource, and BindingNavigator appear in the component tray.
Создание второй формы Create the second form
Создайте вторую форму для передачи данных. Create a second form to pass data to.
В меню Проект выберите пункт Добавить форму Windows. From the Project menu, choose Add Windows Form.
Оставьте имя по умолчанию Form2 и нажмите кнопку Добавить. Leave the default name of Form2, and click Add.
Перетащите главный узел Orders из окна Источники данных на форму Form2. Drag the main Orders node from the Data Sources window onto Form2.
На форме Form2 появляется DataGridView и панель инструментов (BindingNavigator) для перемещения по записям. A DataGridView and a tool strip (BindingNavigator) for navigating records appear on Form2. В области компонентов появляется NorthwindDataSet, CustomersTableAdapter, BindingSource и BindingNavigator. A NorthwindDataSet, CustomersTableAdapter, BindingSource, and BindingNavigator appear in the component tray.
Удалите OrdersBindingNavigator из области компонентов. Delete the OrdersBindingNavigator from the component tray.
OrdersBindingNavigator исчезает из Form2. The OrdersBindingNavigator disappears from Form2.
Добавление запроса TableAdapter Add a TableAdapter query
Добавление запроса TableAdapter в форму Form2 для загрузки заказов выбранного клиента на Form1. Add a TableAdapter query to Form2 to load orders for the selected customer on Form1.
Дважды щелкните файл NorthwindDataSet.xsd в обозревателе решений. Double-click the NorthwindDataSet.xsd file in Solution Explorer.
Щелкните правой кнопкой мыши элемент OrdersTableAdapter и выберите пункт Добавить запрос. Right-click the OrdersTableAdapter, and select Add Query.
Оставьте параметр по умолчанию Использовать инструкции SQL и нажмите кнопку Далее. Leave the default option of Use SQL statements, and then click Next.
Оставьте параметр по умолчанию Инструкция SELECT, возвращающая строки и нажмите кнопку Далее. Leave the default option of SELECT which returns rows, and then click Next.
Добавьте в запрос предложение WHERE, чтобы возвратить Orders на основании CustomerID . Add a WHERE clause to the query, to return Orders based on the CustomerID . Запрос должен выглядеть примерно следующим образом: The query should be similar to the following:
Проверьте правильность синтаксиса параметров для своей базы данных. Verify the correct parameter syntax for your database. Например, в Microsoft Access предложение WHERE должно выглядеть следующим образом: WHERE CustomerID = ? . For example, in Microsoft Access, the WHERE clause would look like: WHERE CustomerID = ? .
Щелкните Далее. Click Next.
Для поля заполнить Дататаблемесод имя введите FillByCustomerID . For the Fill a DataTableMethod Name, type FillByCustomerID .
Снимите флажок Вернуть таблицу данных (DataTable) и нажмите кнопку Далее. Clear the Return a DataTable option, and then click Next.
Нажмите кнопку Готово. Click Finish.
Создание метода на Form2 для передачи данных Create a method on Form2 to pass data to
Щелкните правой кнопкой мыши Form2 и выберите пункт Просмотреть код, чтобы открыть Form2 в редакторе кода. Right-click Form2, and select View Code to open Form2 in the Code Editor.
Добавьте следующий код в Form2 после метода Form2_Load : Add the following code to Form2 after the Form2_Load method:
Создание метода на Form1 для передачи данных и показа Form2 Create a method on Form1 to pass data and display Form2
В Form1 щелкните правой кнопкой мыши сетку данных клиентов и выберите пункт Свойства. In Form1, right-click the Customer data grid, and then click Properties.
В окне Свойства выберите События. In the Properties window, click Events.
Дважды щелкните событие CellDoubleClick. Double-click the CellDoubleClick event.
Откроется окно редактора кода. The code editor appears.
Обновите определение метода в соответствии со следующим примером: Update the method definition to match the following sample:
Запустите приложение Run the app
Нажмите клавишу F5 для запуска приложения. Press F5 to run the application.
Дважды щелкните запись клиента в форме Form1, чтобы открыть Form2 с заказами этого клиента. Double-click a customer record in Form1 to open Form2 with that customer’s orders.
Дальнейшие действия Next steps
В зависимости от требований приложения существуют несколько шагов, которые, возможно, потребуется выполнить после передачи данных между формами. Depending on your application requirements, there are several steps you may want to perform after passing data between forms. Ниже приводится перечень рекомендаций, позволяющих улучшить полученный результат. Some enhancements you could make to this walkthrough include:
Изменение набора данных для добавления или удаления объектов базы данных. Editing the dataset to add or remove database objects. Дополнительные сведения см. в разделе, посвященном созданию и настройке наборов данных. For more information, see Create and configure datasets.
Добавление функциональности для сохранения данных в базу данных. Adding functionality to save data back to the database. Дополнительные сведения см. в разделе Сохранение данных обратно в базу данных. For more information, see Save data back to the database.