Взаимодействие форм си шарп

Взаимодействие форм с передачей параметров

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

Предлагаю простейший способ такого взаимодействия через статическую переменную.

Напомним, что для создания и отображения окна, используют экземпляры (переменные) класса Form, и методы Show() и ShowDialog(). Метод Show() отображает обычное окно, а ShowDialog — модальное.

В программу можно добавить произвольное количество форм (окон), все они будут действовать независимо, если вызываются методом Show(). Модальное окно должно блокировать другие окна, пока не будет закрыто модальное окно.

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

Решение задачи

В пространстве имен проекта объявим структуру:

public struct LoginParol // Что передавать

В классе Form1 объявим статическую переменную:

static public LoginParol LogPar; // набор для обмена информацией

На Форму 1 поместим кнопку button1 («Ввод логина и пароля») и элемент groupBox1 с заголовком «Результат: Логин+Пароль с Формы 2» и на нем элемент textBox1 для отображения результата ввода. Добавим в проект новую форму (Form2).

Вид главной формы (Форма 1):

Обработчик события button1_Click зададим в виде:

private void button1_Click(object sender, EventArgs e) < Form2 newForm = new Form2(); // создаем объект класса Form2 // Примечание: Form2 должна быть добавлена в проект newForm.ShowDialog(); // Вызов формы-диалога textBox1.Text = LogPar.login + "/" + LogPar.parol; // Результат >

На Форму2 поместим две надписи (Label) и два элемента класса TextBox для задания имени и пароля, а также кнопку «Сохранить».

Обработчик события button1_Cick (имя кнопки на Form2 совпадает с именем кнопки на Form1, но это разные кнопки) зададим так:

private void button1_Click(object sender, EventArgs e) < Form1.LogPar.login = textBox1.Text; Form1.LogPar.parol = textBox2.Text; this.Close(); // закрытие Формы2 >

Программа готова. Полностью тексты файлов Form1.cs и Form2.cs представлены ниже.

// Пример взаимодействия форм с передачей параметров // (С) Вячеслав Рычков, 2018 using System; using System.Windows.Forms; namespace ВзаимодействиеФорм_ПередачаДанных < public struct LoginParol // Что передавать < public string login; public string parol; >public partial class Form1 : Form < static public LoginParol LogPar; // набор для обмена информацией public Form1() < InitializeComponent(); >private void button1_Click(object sender, EventArgs e) < Form2 newForm = new Form2(); // создаем объект класса Form2 // Примечание: Form2 должна быть добавлена в проект newForm.ShowDialog(); // Вызов формы=диалога textBox1.Text = LogPar.login + "/" + LogPar.parol; // Результат >> >
using System; using System.Windows.Forms; namespace ВзаимодействиеФорм_ПередачаДанных < public partial class Form2 : Form < public Form2() < InitializeComponent(); >private void button1_Click(object sender, EventArgs e) < Form1.LogPar.login = textBox1.Text; Form1.LogPar.parol = textBox2.Text; this.Close(); >> >

При запуске программы открывается Форма 1 (рисунок 1). После нажатия кнопки «Ввод логина и пароля» открывается диалоговая Форма2 (пока она не закрыта, Форма 1 недоступна). На Форме 2 введем имя (Newton) и пароль (Isaak) пользователя и нажмем кнопку «Сохранить». Форма2 закроется, а в окне текстового редактора textBox1 мы увидим введенные логин и пароль:

313

Теперь на Форме1 вам доступны оба поля переменной LogPar: login и parol.

Поставленная задача решена. Используйте пример для своих приложений.

NEW: Наш Чат, в котором вы можете обсудить любые вопросы, идеи, поделиться опытом или связаться с администраторами.

Источник

Взаимодействие форм си шарп

Чтобы добавить еще одну форму в проект, нажмем на имя проекта в окне Solution Explorer (Обозреватель решений) правой кнопкой мыши и выберем Add(Добавить)->Windows Form.

добавление новой формы

Дадим новой форме какое-нибудь имя, например, Form2.cs:

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

Итак, у нас в проект была добавлена вторая форма. Теперь попробуем осуществить взаимодействие между двумя формами. Допустим, первая форма по нажатию на кнопку будет вызывать вторую форму. Во-первых, добавим на первую форму Form1 кнопку и двойным щелчком по кнопке перейдем в файл кода. Итак, мы попадем в обработчик события нажатия кнопки, который создается по умолчанию после двойного щелчка по кнопке:

private void button1_Click(object sender, EventArgs e)

Теперь добавим в него код вызова второй формы. У нас вторая форма называется Form2, поэтому сначала мы создаем объект данного класса, а потом для его отображения на экране вызываем метод Show:

private void button1_Click(object sender, EventArgs e)

Теперь сделаем наоборот — чтобы вторая форма воздействовала на первую. Пока вторая форма не знает о существовании первой. Чтобы это исправить, надо второй форме как-то передать сведения о первой форме. Для этого воспользуемся передачей ссылки на форму в конструкторе.

Итак перейдем ко второй форме и перейдем к ее коду — нажмем правой кнопкой мыши на форму и выберем View Code (Просмотр кода). Пока он пустой и содержит только конструктор. Поскольку C# поддерживает перегрузку методов, то мы можем создать несколько методов и конструкторов с разными параметрами и в зависимости от ситуации вызывать один из них. Итак, изменим файл кода второй формы на следующий:

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace HelloApp < public partial class Form2 : Form < public Form2() < InitializeComponent(); >public Form2(Form1 f) < InitializeComponent(); f.BackColor = Color.Yellow; >> >

Фактически мы только добавили здесь новый конструктор public Form2(Form1 f) , в котором мы получаем первую форму и устанавливаем ее фон в желтый цвет. Теперь перейдем к коду первой формы, где мы вызывали вторую форму и изменим его на следующий:

private void button1_Click(object sender, EventArgs e)

Поскольку в данном случае ключевое слово this представляет ссылку на текущий объект — объект Form1, то при создании второй формы она будет получать ее (ссылку) и через нее управлять первой формой.

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

Мы можем также создавать объекты и текущей формы:

private void button1_Click(object sender, EventArgs e)

При работе с несколькими формами надо учитывать, что одна из них является главной — которая запускается первой в файле Program.cs. Если у нас одновременно открыта куча форм, то при закрытии главной закрывается все приложение и вместе с ним все остальные формы.

Источник

C#: Обмен данными между формами

Блог доброго программиста

Многие, кто начинал изучение WinForm приложений, сталкивались с проблемой обмена данными между окнами программы. Обмен данными между формами сводится к трем основным принципам: передача параметров в форму, получение данных из формы, изменение значений другой формы. Начнем по порядку.

1) Передача параметров в форму. Любой класс, должен иметь конструктор, и WinForm в этом случае не исключение. А следовательно очевидным является тот факт, что передача данных необходимых для инициализации формы необходимо проводить именно через конструктор формы. Приведем пример.

Создадим WinForm и перейдем к коду. Наблюдаем следующую картину:

public partial class Form1 : Form < public Form1() // >

Допустим на данной форме размещен элемент textBox в который мы хотим установить значение, при открытии нашей формы. Тогда модифицируем наш код следующим образом:

public partial class Form1 : Form < public Form1() < InitializeComponent(); >public Form1(string text) // >

Важно: Все действия, выполняемые с объектами формы должны быть произведены после функции InitializeComponent()!

2-3) По сути задача получения данных из формы и изменение данных в форме сводистя к одной задаче. Пусть у нас есть две формы Form1 и Form2. В первой форме у нас есть три кнопки: open, read, write . Первая откроет вторую форму, в которой есть элемент textBox, Вторая покажет сообщение с текстом, введенным в textBox формы номер два, третья очистит textBox из Form2. Имеем:

public partial class Form1 : Form < private Form2 F2 = new Form2(); //private void open_Click(object sender, EventArgs e) < F2.ShowDialog(); >private void read_Click(object sender, EventArgs e) < MessageBox.Show(F2.textBoxValue); >private void write_Click(object sender, EventArgs e) < F2.textBoxValue = String.Empty; >> public partial class Form2 : Form < public string textBoxValue //set < textBox.Text = value; >> public Form2() < InitializeComponent(); >>

Вот и все. Оказалось не все так сложно 😉

Запись опубликована в рубрике C# с метками C#, Forms, WinForms. Добавьте в закладки постоянную ссылку.

Источник

Читайте также:  Wsremote vtio cn static en invite html
Оцените статью