Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/15: Рейтинг темы: голосов - 15, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 30.09.2016
Сообщений: 61

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

06.06.2018, 18:22. Показов 2948. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
У меня есть две формы. Из первой формы открывается вторая форма(первая при этом не закрывается). На первой форме у меня есть textbox и кнопка вызова второй формы. На второй форме textbox и button1. Мне нужно чтобы при нажатии на button1 из второй форме изменилось значение textbox на первой форме на значение textbox из второй формы. При этом чтобы обе формы при этом были открыты.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
06.06.2018, 18:22
Ответы с готовыми решениями:

Есть две формы и из второй надо передать значения переменной в первую
Добрый день...Я только недавно начал изучать C# и с толкнулся с такой проблемой: Есть две формы и из второй надо передать значения...

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

Как из второй формы показать первую?
В программе 1 форма скрывается при нажатии на кнопку и появляется 2, а при нажатии на кнопку на 2 форме, должна скрыватся 2 и появляться 1,...

3
53 / 52 / 36
Регистрация: 25.05.2015
Сообщений: 162
06.06.2018, 23:51
Лучший ответ Сообщение было отмечено race99 как решение

Решение

Я бы сделал так:
В файле Program.cs создал статический класс Data, для общих данных между формами:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace WindowsFormsApp5
{
    static class Program
    {
        /// <summary>
        /// Главная точка входа для приложения.
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
    }
 
    public static class Data
    {
        public static string Value { get; set; } = "yes";
 
        public static bool Form2_Opened { get; set; }
    }
}
А потом использовал бы его:
на форме1 по кнопке вызывал бы форму два и запускал таймер:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
private void btnOpen_Click(object sender, EventArgs e)
        {
            f = new Form2();
            f.Show();
            Data.Form2_Opened = true;
            Monitoring();
        }
 
        // Мониторинг изменения переменных
        public void Monitoring()
        {
            Task.Factory.StartNew(async () =>
            {
                while (true)
                {
                    // Если Value не пусто добавляем его в наш текстбокс на форме1
                    if (!string.IsNullOrEmpty(Data.Value))
                        txtEd.Text = Data.Value;
                    // Проверяем открыта ли форма2, если да - выходим из метода
                    if (Data.Form2_Opened == false)
                        return;
                    // ждём 100 мс. можно разные значения поставить
                    await Task.Delay(100);
                }                
            }, CancellationToken.None, 
                TaskCreationOptions.None, 
                TaskScheduler.FromCurrentSynchronizationContext());
        }
и код на второй форме, у меня там только textbox1 и button1:
C#
1
2
3
4
5
6
7
8
9
10
11
private void button1_Click(object sender, EventArgs e)
        {
            if(!string.IsNullOrWhiteSpace(textBox1.Text))
                Data.Value = textBox1.Text;
        }
 
        private void Form2_FormClosed(object sender, FormClosedEventArgs e)
        {
            // После закрытия формы меняем переменную на false
            Data.Form2_Opened = false;
        }
1
549 / 480 / 315
Регистрация: 24.09.2013
Сообщений: 3,345
Записей в блоге: 1
07.06.2018, 14:54
Припоминаю: несколько дней назад написал код для такой задачи, не попадал ли к Вам?
0
360 / 287 / 76
Регистрация: 21.06.2016
Сообщений: 1,115
07.06.2018, 15:20
гуглить в сторону INotifyPropertyChanged.
Это самый простой способ, безо всяких тасков и прочей ерунды.
Если слишком лень гуглить - дам наводку - делаешь отдельный класс, реализовывающий этот интерфейс
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
public class ModelClass : INotifyPropertyChanged
    {
        private string myText;
 
        public string MyText
        {
            get
            {
                return myText;
            }
            set
            {
                if (myText != value)
                {
                    myText = value;
                    NotifyPropertyChanged();
                }
            }
        }
 
        public event PropertyChangedEventHandler PropertyChanged;
 
 
        private void NotifyPropertyChanged([CallerMemberName] String propertyName = "")
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
            }
        }
    }
А далее в каждой форме делаешь байндинг
C#
1
tbSlave.DataBindings.Add("Text", _mc, "MyText", true, DataSourceUpdateMode.OnPropertyChanged);
Естественно - в обоих формах объект класса должен быть единый, т.е. передавай объект класса, например - в параметрах конструктора.
Ну и сам файл.
Вложения
Тип файла: 7z testNotifyProperty.7z (23.0 Кб, 13 просмотров)
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
07.06.2018, 15:20
Помогаю со студенческими работами здесь

Как получить из второй формы данные на первую
Есть форма 1 и форма 2. Первая форма открывает вторую. При закрытии второй формы нужно получить значение массива из второй формы на первую....

Как из второй формы занести данные в первую форму
Здраствуйте, подскажите пожалуйста. Такой вопрос: есть у меня 2 формы. Из компонента Mainmemo я вызываю форму2. Для этого в uses...

Как спрятать первую форму после открытия второй формы?
Добрый день. Пишу дипломную и возник такой вопрос: у меня первая форма вызывается в main самого класса формы: public class...

Как запретить сворачивание второй формы, когда сворачиваешь первую?
Добрый день. В форме_1 создаю форму_2 указывая владельца форму_1. Вопрос: как запретить сворачивание формы_2, когда сворачиваешь форму_1...

Как передать в первую форму введённое значение?
У меня есть две формы: Form1 и Form2. На Form1 есть кнопка, которая вызывает открытие Form2, а на Form2 есть текстбокс в который...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru