@a63826ndrew
Студент, новичок в Python

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

Здравствуйте!
Есть две формы:
61782d0da9d5b119481086.png
И проблема следующая: нужно сделать так, чтобы после нажатия кнопки "Отправить число Бобу" значение из textbox "Большое число P" из формы "Alice" передалось в форму "Bob", в textbox "Большое число P" и как это можно сделать?
Если будут наглядные примеры кода или ссылки на источник то буду благодарен
  • Вопрос задан
  • 111 просмотров
Пригласить эксперта
Ответы на вопрос 1
Casper-SC
@Casper-SC
Программист (.NET)
Без MVP можно попробовать как-то так. Здесь удобно всё это дело тем, что обновление можно получить хоть в 10 формах, хоть ещё где-то. Просто подписываемся на обработчик события и всё.

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

Program.cs
using System;
using System.Windows.Forms;
using WinFormsApp.Domain;

namespace WinFormsApp
{
    static class Program
    {
        [STAThread]
        static void Main()
        {
            Application.SetHighDpiMode(HighDpiMode.SystemAware);
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            
            Application.Run(new AliceForm(Storage));
        }

        private static DataStorage Storage => new DataStorage();
    }
}


Domain\DataStorage.cs
using System.Collections.Generic;

namespace WinFormsApp.Domain
{
    public delegate void ItemUpdatedHandler(string key);

    public class DataStorage
    {
        private readonly Dictionary<string, string> _data = new Dictionary<string, string>();

        public event ItemUpdatedHandler ItemUpdated; 

        public void AddOrUpdate(string key,string newValue)
        {
            if (_data.TryGetValue(key, out _))
            {
                _data[key] = newValue;
            }
            else
            {
                _data.Add(key, newValue);
            }
            ItemUpdated?.Invoke(key);
        }

        public bool TryGetValue(string key, out string value)
        {
            return _data.TryGetValue(key, out value);
        }
    }
}


Domain\DataStorageKey.cs
namespace WinFormsApp.Domain
{
    internal sealed class DataStorageKey
    {
        public const string BIG_P_KEY = "big_p";
    }
}


AliceForm.cs
using System.Windows.Forms;
using WinFormsApp.Domain;

namespace WinFormsApp
{
    public partial class AliceForm : Form
    {
        private readonly DataStorage _dataStorage;
        private readonly BobForm _bobForm;

        public AliceForm(DataStorage dataStorage)
        {
            InitializeComponent();

            Load += OnFormLoad;

            _dataStorage = dataStorage;
            _bobForm = new BobForm(dataStorage);
        }

        private void OnFormLoad(object sender, System.EventArgs e)
        {
            _bobForm.Show(this);
        }

        private void OnSendButtonClick(object sender, System.EventArgs e)
        {
            _dataStorage.AddOrUpdate(DataStorageKey.BIG_P_KEY, _bigPTextBox.Text);
        }
    }
}


BobForm.cs
using System.Windows.Forms;
using WinFormsApp.Domain;

namespace WinFormsApp
{
    public partial class BobForm : Form
    {
        private readonly DataStorage _dataStorage;

        public BobForm(DataStorage dataStorage)
        {
            InitializeComponent();
            
            _dataStorage = dataStorage;
            _dataStorage.ItemUpdated += OnDataStorageItemUpdated;

            Closing += OnFormClosing;
        }

        private void OnFormClosing(object sender, System.ComponentModel.CancelEventArgs e)
        {
            _dataStorage.ItemUpdated -= OnDataStorageItemUpdated;
        }

        private void OnDataStorageItemUpdated(string key)
        {
            if (key == DataStorageKey.BIG_P_KEY)
            {
                if (_dataStorage.TryGetValue(key, out string value))
                {
                    _bigPTextBox.Text = value;
                }
            }
        }
    }
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы