Какой наиболее эффективный способ передачи информации между формами данных?

  • 28 августа 2023 г. 13:36
Ответы на вопрос 2
Использование свойства "Tag" формы является наиболее эффективным способом передачи информации между формами данных. "Tag" это свойство, которое позволяет привязывать произвольные данные к форме. В основной форме, вы можете присвоить значение переменной пути сохранения в свойство "Tag":

```csharp
form2.Tag = path;
```

Затем, в другой форме, вы можете получить значение пути сохранения:

```csharp
string path = (string)form2.Tag;
```

Значение переменной будет доступно даже после перехода между формами.
Чтобы избежать проблем, хранение данных и их отображение следует разделить. Вместо создания своего собственного решения, можно использовать уже существующие подходы, такие как MVP (Model-View-Presenter), MVC (Model-View-Controller). Основная идея заключается в том, чтобы иметь отдельный объект (модель), который хранит данные, а все формы (вью), отображающие эти данные, получают их непосредственно из этого объекта. Если данные изменяются в одной форме, они автоматически обновляются в других формах (при этом следит презентер или контроллер).

Вот пара популярных решений:

1) Использование конструктора с параметром (или публичного свойства). Например, в форме 2 можно добавить конструктор, который принимает значение:

public Form2(string value)
{
	Value = value;
	...
}

А затем из формы 1 можно создать новый экземпляр формы 2, передавая значение:

public Form1()
{
	...
}

void OpenNewForm(...)
{
	var form2 = new Form2("myString");
	var form2_2 = new Form2
	{
		Value = value
	};
}

2) Использование синглтона (но при наличии DI - Dependency Injection будет лучше). Создайте объект, который будет хранить нужные переменные в одном месте, и вызывайте его в любом месте, где требуется доступ к этим переменным.
Похожие вопросы