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

Постановка задачи

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

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

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

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

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

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

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

public struct LoginParol    // Что передавать
   {
       public string login;
       public string parol;
   }

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

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

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

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

311Рисунок 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 для задания имени и пароля, а также кнопку «Сохранить».

Вид Формы2 :

312Рисунок 2.

Обработчик события 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 представлены ниже.

Form1.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; // Результат
        }
    }
}

Form2.cs:

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: Наш Чат, в котором вы можете обсудить любые вопросы, идеи, поделиться опытом или связаться с администраторами.


Помощь проекту:

Понравилась статья? Поделиться с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x
()
x