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

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

5 июля 2022       114 просмотров

Итак, вам нужно передать какое-то значение переменной из form1 в form2, а вообще, вероятно и в любую другую.
Давайте для примера предположим, что нам, допустим, нужно передавать логин/пароль бедного пользователя, чтобы проверять на определенных этапах — что это за хрен с горы.
Что ж, тогда для начала нам нужно объявить глобальные переменные в Program.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace ebala
{
 internal static class Program
 {
 /// <summary>
 /// Главная точка входа для приложения.
 /// </summary>
 [STAThread]
 static void Main ()
 {
 Application.EnableVisualStyles ();
 Application.SetCompatibleTextRenderingDefault (false);
 Application.Run (new Form1 ());
 }
 public static string user;//делаем глобальную переменную (да-да, это то, что мы добавили)
 public static string password;//и эту тоже
 }
}

Далее идем в нашу первую форму и делаем там пару текстбоксов, типа так:

типа авторизация

Вы, конечно же, скажете: «А где кнопко? Ты что, наркоман?»
А я отвечу, что ты сам наркоман, и залезу под диван для примера достаточно задействовать обработчик KeyDown. Притом мы не жадные, поставим его и на первый и на второй текстбокс. Текст введенный в них мы передаем в переменные, которые объявили выше, которые находятся в Program, в доме который построил Джек так что у нас получится что-то  типа:

using System.Windows.Forms;

namespace ebala
{
 public partial class Form1: Form
 {
 public Form1 ()
 {
 InitializeComponent ();
 }

 private void textBox1_KeyDown (object sender, KeyEventArgs e)
 {
 if (e.KeyCode == Keys.Enter)//нам нужна реакция только на Enter
 {
 Program.user = textBox1.Text;//забираем значение из первого текстбокса
 Program.password = textBox2.Text;//и из второго
 Form2 form2 = new Form2 ();
 form2.Show ();//объявляем и переходим ко второй форме
 this.Hide ();//а эту с глаз долой прячем
 }
 }

 private void textBox2_KeyDown (object sender, KeyEventArgs e)
 {
 if (e.KeyCode == Keys.Enter)//нам нужна реакция только на Enter
 {
 Program.user = textBox1.Text;//забираем значение из первого текстбокса
 Program.password = textBox2.Text;//и из второго
 Form2 form2 = new Form2 ();
 form2.Show ();//объявляем и переходим ко второй форме
 this.Hide ();//а эту с глаз долой прячем
 }
 }
 }
}

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

форма2

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

using System;
using System.Windows.Forms;

namespace ebala
{
 public partial class Form2: Form
 {
 public Form2 ()
 {
 InitializeComponent ();
 }

 private void button1_Click (object sender, EventArgs e)
 {
 MessageBox.Show (Program.user + " " + Program.password);//посмотрим что же мы там ввели, используя месседжбокс
 }

 private void Form2_FormClosed (object sender, FormClosedEventArgs e)
 {
 Application.Exit ();//убиваем процесс
 }
 }
}

Что ж, проверим результат:

опять это акно

Я, конечно, мог бы скрыть пароль, используя свойство «PasswordChar», но я не Эмиль Кио и не Амаяк Акопян, и секретов фокусов от вас у меня нет, к тому же мне опять лень так нагляднее.

Жамкаем Enter и видим шыдевр дизайна:

шыдевр

Отлично, нам осталось только нажать на кнопку кнопко:

результат

Вот так просто и лаконично можно тасовать карты переменные.