Как передать значение из одной формы в другую c
Перейти к содержимому

Как передать значение из одной формы в другую c

  • автор:

Передача значения переменной из одной формы в другую

Функция одной и нескольких переменных

1. Передача значения переменной из одной формы в другую

2.

2
C#
Часто возникает
необходимость передать
определённые параметры
между формами в одном
приложении, например
значения каких либо
переменных, или
запустить какую либо
процедуру или функцию в
другой форме

3.

Первый способ
3
1. Объявить глобальную статическую
переменную;
2. Определить значение переменной;
3. Вторая форма;
4. На второй форме прочитать
перемеренную так
Form1.переменная
5. Выполнять с ней работу.
C#

4.

Первый способ
4
C#

5.

Первый способ
5
1
2
3
C#

6.

Первый способ
6
4
5
C#

7.

8.

9.

10.

Первый способ
10
C#
1. Объявить переменную на 1 форме;
2. Предать переменную 2 форме
Form2 f2 = new Form2(переменная);
f2.Show();
3. Объявить переменную на 2 форме
4. В конструкторе 2 формы определить
переменную от 1 формы
5. Присвоить переменную 2 формы
значение переменной 1 формы, …

Помогите, как в c# передать значения из одной формы на другую, допустим переменную Y

У меня получилось, но только с командой f.ShowDialog();
Form4 f = new Form4();
f.ShowDialog();
по другом не работает, как сделать без ShowDialog, что бы не открывало форму .

Лучший ответ

Что бы передать данные в другую форму создай аргументы в констукторе класса второй формы и передавай Form4 f = new Form4(агрумент 1, аргумент 2 и так далее сколько надо);
ShowDialog() — открывает форму поверх основной и не дает переключиться на родительскую. Если надо просто показать и управлять всеми формами исполльзуй Show(). Если открывать не надо вообще то зачем тебе форма? Создай метод который выполнит все вычисления и вернет результат.

Ниох ФлауэрсМастер (1134) 7 лет назад
ок, спасибо )
Ниох ФлауэрсМастер (1134) 7 лет назад
как так? то есть мне с первой формы надо на вторую закинуть 3 перменные, и где метод создавать ?

KernelPanic Знаток (413) Прочитайте про конструктор класса. В коде второй формы он будет. И вы сразу поймете как передавать аргументы. То есть даже не передадим аргументы а создадим окно с необходимыми параметрами. В нашем случае это аргументы. Раскрыли бы задачу полностью я бы мог что то вам подсказать конкретнее.

Как передать переменную из первой форму в форму 3

Я начинаю изучать C#, делаю простенькие программы и учусь на этом ) Я создал две формы Form1 и Form3 , пытаюсь передать значение radioButton , которое может быть true или false . Код Form1:

public partial class Form1 : Form < public Form1() < InitializeComponent(); >public void Otvet1_Click(object sender, EventArgs e) < if (VariantNeVern1.Checked || VariantNeVern2.Checked || VariantVern.Checked) < Hide(); Form2 Vopros = new Form2(); Vopros.ShowDialog(); >else MessageBox.Show("Выбирите ответ"); Close(); > private void VariantNeVern1_CheckedChanged(object sender, EventArgs e) < Form3 Vopros = new Form3(); Vopros.Owner = this; >> 
public partial class Form3 : Form < public Form3() < InitializeComponent(); Form1 main = new Form1(); Rezult.Text = Convert.ToString(main.VariantNeVern1);//тут косяк >private void CloseTest_Click(object sender, EventArgs e) < Close(); >> 

Я должен получить результат true или false , чтобы убедиться работает или нет, постоянно получаю false , а по логике — если я выделил radioButton с именем VariantNeVern1 , должен получить true .

Отслеживать
20.2k 6 6 золотых знаков 37 37 серебряных знаков 81 81 бронзовый знак
задан 2 авг 2017 в 15:28
3 1 1 серебряный знак 2 2 бронзовых знака
Почитай про свойства и что это такое.
3 авг 2017 в 7:07

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

У тебя пока проблемы с ООП.

Form1 main = new Form1(); // на самом деле, косяк тут Rezult.Text = Convert.ToString(main.VariantNeVern1);//тут не косяк 

Ты создаёшь новый объект типа Form1. Он не имеет никакого отношения к главной форме твоего приложения. Соответственно, все контролы в нём находятся в начальном состоянии и ты передаёшь всегда False. Если это не случайная ошибка, рекомендую начать с консольного приложения, но с хорошей объектной моделью и кучей маленьких классиков, каждый из которых имеет свою область ответственности. После этого возвращайся в мир UI.

Если говорить о WinForms, то на дворе 2017. И если есть желание развиваться в направлении UI, рекомендую начать сразу с WPF.

Если говорить о самом способе передачи элемента управления, то в мире UI так не делают. Есть несколько основных шаблонов проектирования, которых стараются придерживаться (только без фанатизма). Например MVC (модель, представление, контроллер) и MVVMC (модель, модель представления, представление, контроллер).

В твоём случае не хватает именно класса модели, которая хранит определенные состояния. Важно понимать, что если ты не пишешь редактор интерфейса, то тебе не нужно передавать между формами кнопку. Тебе нужно передать некоторый режим работы, за который она отвечает.

public enum Variants

Эти состояния хранятся в некотором модельном классе, контексте, который шарится между всеми желающими.

public class Model < public Variants CurrentVariant > 

И вот эту модель ты один раз инициализируешь, а затем передаешь во все формы, которые должны общаться между собой (на самом деле, обычно, передаёшь контроллер — более умную сущность, которая содержит не только данные, но и некоторые операции, действия, но об этом ты прочитаешь в гугле по запросу MVC).

Model model = new Model(); Form1 form1 = new Form1(model); Form2 form2 = new Form2(model); 

А они уже её используют и сохраняют в ней сотояние кнопки, не как «Checked», а как конкретное состояние системы.

public partial class Form1 : Form < private readonly Model _model; public Form1(Model model) < _model = model; >private void VariantNeVern1_CheckedChanged(object sender, EventArgs e) < bool isChecked = VariantNeVern1.Checked; Variants variant = isChecked ? Variants.Incorrect : Variants.Correct; _model.CurrentVariant = variant; >> 

Соответственно вторая форма может получить доступ к этому значению.

В какой момент создавать формы и как передать между ними модель данных или контроллер — это та самая проблема, ради которой и придумывают шаблоны проектирования.

Прочитай про MVC, большая часть вопросов отпадёт. Если перейдёшь на WPF, прочитай про Binding и INotifyPropertyChanged. Когда освоишься, можешь посмотреть в сторону более строгого и тяжеловестного MVVMC.

Ну а в рамках твоего примера, можешь либо создать обе формы вначале, а затем отображать и скрывать их методами Show и Hide, при этом во второй подпишись на событие Shown и в этот момент считывай значение из модели; либо создавать вторую форму внутри первой и передавать модель из неё, тогда инициализацию своего «Rezult» ты можешь оставить в конструкторе, опять же, получая значение из модели.

Надеюсь, что смог помочь, а не только запутать.

Передача данных между формами

Область применения:yesVisual Studio Visual Studio для Mac noVisual Studio Code no

Наборы данных и связанные классы являются устаревшими технологиями платформа .NET Framework с начала 2000-х годов, которые позволяют приложениям работать с данными в памяти во время отключения приложений от базы данных. Они особенно полезны для приложений, которые позволяют пользователям изменять данные и сохранять изменения обратно в базу данных. Хотя наборы данных оказались очень успешными, мы рекомендуем новым приложениям .NET использовать Entity Framework Core. Entity Framework предоставляет более естественный способ работы с табличными данными в виде объектных моделей, и он имеет более простой интерфейс программирования.

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

В этом руководстве демонстрируется только один способ передачи данных между формами. Существуют другие варианты передачи данных в форму, включая создание второго конструктора для получения данных или создание общедоступного свойства, которое можно задать с данными из первой формы.

Задачи, иллюстрированные в этом руководстве, включают:

  • Создание проекта приложения Windows Forms (платформа .NET Framework).
  • Создание и настройка набора данных с помощью мастера настройки источника данных.
  • Выбор элемента управления, создаваемого на форме при перетаскивании элементов из окна Источники данных. Дополнительные сведения см. в разделе «Настройка элемента управления для создания при перетаскивании из окна источников данных».
  • Создание элемента управления с привязкой к данным с помощью перетаскивания элементов из окна Источники данных на форму.
  • Создание второй формы с сеткой для отображения данных.
  • Создание запроса адаптера таблицы для получения заказов определенного клиента.
  • Передача данных между формами.

Необходимые компоненты

Чтобы завершить работу с этим руководством, вам потребуется разработка классических приложений .NET и рабочие нагрузки хранения и обработки данных, установленные в Visual Studio. Чтобы установить их, откройте Visual Studio Installer и нажмите кнопку «Изменить» (или «Изменить >«) рядом с версией Visual Studio, которую вы хотите изменить. См. раздел Изменение Visual Studio.

В этом руководстве используется SQL Server Express LocalDB и пример базы данных Northwind.

  1. Если у вас нет SQL Server Express LocalDB, установите его на странице скачивания SQL Server Express или с помощью Установщика Visual Studio. В установщике Visual Studio SQL Server Express LocalDB можно установить как часть рабочей нагрузки хранилища данных и обработки или как отдельный компонент.
  2. Установите пример базы данных Northwind, выполнив следующие действия.
    1. В Visual Studio откройте окно обозреватель объектов SQL Server. (SQL Server обозреватель объектов устанавливается как часть рабочей нагрузки хранилища данных и обработки в Visual Studio Installer.) Разверните узел SQL Server. Щелкните правой кнопкой мыши экземпляр LocalDB и выберите новый запрос. Откроется окно редактора запросов.
    2. Скопируйте скрипт Northwind Transact-SQL в буфер обмена. Этот скрипт T-SQL создает базу данных Northwind с нуля и заполняет ее данными.
    3. Вставьте скрипт T-SQL в редактор запросов и нажмите кнопку «Выполнить «. Через некоторое время запрос завершает работу и создается база данных Northwind.

    Создание проекта приложения Windows Forms

    1. В Visual Studio в меню Файл выберите пункты Создать>Проект.
    2. Разверните Visual C# или Visual Basic в левой области, а затем выберите «Рабочий стол Windows».
    3. В средней области выберите тип проекта приложения Windows Forms.
    4. Назовите проект PassingDataBetweenForms и нажмите кнопку «ОК«. Создается проект PassingDataBetweenForms, который добавляется в Обозреватель решений.

    Создание источника данных

    1. Чтобы открыть окно «Источники данных» , в меню «Данные » щелкните » Показать источники данных».
    2. В окне Источники данных выберите Добавить новый источник данных, чтобы запустить Мастер настройки источника данных.
    3. На странице Выбор типа источника данных выберите элемент База данных и нажмите Далее.
    4. На странице Выбор модели базы данных выберите Набор данных и нажмите кнопку Далее.
    5. На странице Выбор подключения к базе данных выполните одно из следующих действий:
      • Если подключение к учебной базе данных Northwind доступно в раскрывающемся списке, то выберите его.
      • Выберите Новое подключение для открытия диалогового окна Добавить/изменить подключение.
    6. Если базе данных требуется пароль и выбран параметр для включения конфиденциальных данных, выберите параметр и нажмите кнопку Далее.
    7. На странице «Сохранить строка подключения в файл конфигурации приложения» нажмите кнопку «Далее«.
    8. Разверните узел Таблицы на странице Выбор объектов базы данных.
    9. Выберите таблицы Customers и Orders и нажмите кнопку Готово. NorthwindDataSet добавляется в проект, и таблицы Customers и Orders отображаются в окне Источники данных.

    Создание первой формы (Form1)

    Вы можете создать сетку с привязкой к данным (элемент управления DataGridView) с помощью перетаскивания узла Customers из окна Источники данных на форму.

    Создание сетки с привязкой к данным на форме

    • Перетащите главный узел Customers из окна Источники данных на форму Form1. На форме Form1 появляется DataGridView и панель инструментов (BindingNavigator) для перемещения по записям. В области компонентов появляется NorthwindDataSet, CustomersTableAdapter, BindingSource и BindingNavigator.

    Создание второй формы

    Создайте вторую форму для передачи данных.

    1. В меню Проект выберите пункт Добавить форму Windows.
    2. Оставьте имя по умолчанию Form2 и нажмите кнопку Добавить.
    3. Перетащите главный узел Orders из окна Источники данных на форму Form2. На форме Form2 появляется DataGridView и панель инструментов (BindingNavigator) для перемещения по записям. В области компонентов появляется NorthwindDataSet, CustomersTableAdapter, BindingSource и BindingNavigator.
    4. Удалите OrdersBindingNavigator из области компонентов. OrdersBindingNavigator исчезает из Form2.

    Добавление запроса TableAdapter

    Добавьте запрос TableAdapter в Form2, чтобы загрузить заказы для выбранного клиента в Form1.

    1. Дважды щелкните файл NorthwindDataSet.xsd в обозревателе решений.
    2. Щелкните правой кнопкой мыши элемент OrdersTableAdapter и выберите пункт Добавить запрос.
    3. Оставьте параметр по умолчанию Использовать инструкции SQL и нажмите кнопку Далее.
    4. Оставьте параметр по умолчанию Инструкция SELECT, возвращающая строки и нажмите кнопку Далее.
    5. Добавьте в запрос предложение WHERE, чтобы возвратить Orders на основании CustomerID . Запрос должен выглядеть примерно следующим образом:

    SELECT OrderID, CustomerID, EmployeeID, OrderDate, RequiredDate, ShippedDate, ShipVia, Freight, ShipName, ShipAddress, ShipCity, ShipRegion, ShipPostalCode, ShipCountry FROM Orders WHERE CustomerID = @CustomerID 

    Примечание. Проверьте правильность синтаксиса параметров для своей базы данных. Например, в Microsoft Access предложение WHERE должно выглядеть следующим образом: WHERE CustomerID = ? .

    Создание метода в Form2 для передачи данных в

    1. Щелкните правой кнопкой мыши Form2 и выберите пункт Просмотреть код, чтобы открыть Form2 в редакторе кода.
    2. Добавьте следующий код в Form2 после метода Form2_Load :
    internal void LoadOrders(String CustomerID)
    Friend Sub LoadOrders(ByVal CustomerID As String) OrdersTableAdapter.FillByCustomerID(NorthwindDataSet.Orders, CustomerID) End Sub 

    Создание метода в Form1 для передачи данных и отображения Form2

    1. В Form1 щелкните правой кнопкой мыши сетку данных клиентов и выберите пункт Свойства.
    2. В окне Свойства выберите События.
    3. Дважды щелкните событие CellDoubleClick. Откроется окно редактора кода.
    4. Обновите определение метода в соответствии со следующим примером:
    private void customersDataGridView_DoubleClick(object sender, EventArgs e)
    Private Sub CustomersDataGridView_DoubleClick() Handles CustomersDataGridView.DoubleClick Dim SelectedRowView As Data.DataRowView Dim SelectedRow As NorthwindDataSet.CustomersRow SelectedRowView = CType(CustomersBindingSource.Current, System.Data.DataRowView) SelectedRow = CType(SelectedRowView.Row, NorthwindDataSet.CustomersRow) Dim OrdersForm As New Form2 OrdersForm.LoadOrders(SelectedRow.CustomerID) OrdersForm.Show() End Sub 

    Выполнить приложение

    • Нажмите клавишу F5 для запуска приложения.
    • Дважды щелкните запись клиента в форме Form1, чтобы открыть Form2 с заказами этого клиента.

    Следующие шаги

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

    • Изменение набора данных для добавления или удаления объектов базы данных. Дополнительные сведения см. в разделе, посвященном созданию и настройке наборов данных.
    • Добавление функциональности для сохранения данных в базу данных. Дополнительные сведения см. в разделе «Сохранение данных обратно в базу данных».

    См. также

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *