какой лучший / правильный способ взаимодействия между несколькими окнами в приложении C#? Недавно я столкнулся с проблемой, когда одно из окон программы должно вызывать метод, изменяющий главное окно. Мое решение заключалось в создании фабричного класса, который упорядочивал бы все базовые данные модели и организовывал взаимодействие между различными окнами (через делегатов). Однако, поскольку передача одного или двух делегатов не была проблемой, я начал думать, что, если бы другим моим окнам потребовалось бы 10 делегатов для правильного взаимодействия с главным окном? Делегаты - хорошее решение? Как передать их по-хорошему - через конструктор, свойства? Или, может быть, необходимость использования такого количества делегатов сама по себе является серьезным недостатком дизайна?
Ах, мои извинения. Я снова открою.
@TalhaIrfan удален по запросу.
@DavidArno Спасибо, Дэвид. Очень признателен!





Если нужно взаимодействовать только с главным окном, почему бы не дать ссылку на главное окно в конструкторе других?
public class MainForm : Form
{
}
public class OtherForm : Form
{
protected MainForm MainForm { get; set; }
public OtherForm(MainForm mainForm) : base()
{
this.MainForm = mainForm;
}
}
Обновлено:
Просто и эффективно.
Если вашим формам необходимо взаимодействовать со всеми другими формами приложения, то лучше подойдет шаблон типа локатор услуг.
Было бы лучше сделать это в базовой SubForm.
Понятно. И это был всего лишь краткий комментарий :)
Раньше с MFC было что-то, что уведомляло все окна. Вы передадите идентификатор события с параметром.
Вы можете сделать что-то подобное с одним делегатом, который предоставит идентификатор события и набор параметров.
Самым большим преимуществом этого является то, что в окнах должен быть реализован только один шлюз.
Вы можете использовать один делегат, используя настраиваемый EventArgs для передачи нескольких сведений, таких как: тип уведомления, дополнительные параметры и т. д.
Вам нужно отделить модель от представления с помощью контроллера. Поместите объект, который будет иметь как ссылку на форму, так и управлять общей информацией.
Другое решение - отправить ссылку formX на formY таким образом, чтобы они могли общаться.
Мы используем настраиваемый менеджер форм, который использует шаблон субъект / наблюдатель.
Каждая открытая форма передается в FormsManager, FromsManager становится наблюдателем формы.
Это также делает форму наблюдателем FormsManager.
Таким образом, вы получаете каждую форму, наблюдающую за FormsManager и FormsManager, наблюдающую за каждой формой. Каждая форма может затем связываться с любой другой формой через FormsManager, при этом каждая форма не должна знать обо всех остальных.
Я считаю, что это то, что я ищу - поскольку мои данные отображаются по-разному (несколько окон, которые каким-то образом должны сообщаться), паттер наблюдателя звучит как идеальное решение. Большое спасибо!
Вовсе нет, я думаю, речь идет об отправке сообщений между окнами в одном приложении, а не о межпроцессном взаимодействии.