Другие языки программирования и технологии

Как в C# инициализировать массив в свойстве класса?

Есть многоформенное приложение. В нем в Форме1 вводится размерность некой матрицы, в Форме2 - инициализируется 2-мерный массив этой размерности, потом делается какая-то операция над матрицей, потом выводится полученная матрица в Форму3. Единственное что - у них класс общий. Как сделать так, чтобы данные о матрице были известны в каждой из форм? Моя мысль - через свойство инициализировать статический массив класса. Как это делается правильно?
Привет, Чувак! Не слушай этого supra7, он гонит.. .Вернее, он совсем ничего не ответил. Вопрос твой понятен как божий день. Это проблема передачи данных между форм, что так просто не реализуется, потому что у каждой формы есть свой процесс, и обращаться надо через Invoke, а оно тебе надо? Сделай глобальный класс и обменивайся данными через него. Еще можно при передачи между формами использовать слово this, и получать данные как this.myVar или типа того.
Есть два подхода к решению проблемы - очень сложный и очень простой. Сложный актуален тогда, когда формы никак не связаны друг с другом. Например, когда открывается новое окно, или доступ осуществляется из/к классу, работающему непонятно где - в другом потоке или на другой машине.. .
Ответ уже заложен в вопросе - если доступ к форме возможен только через сторонние процессы, например, события, то решаться он должен с помощью событий, таймеров, делегатов и пр. Этот случай решается так:
http://www.gotdotnet.ru/forums/15/139334/
Один товарищ не поленился, и выложил целых три способа, дай бог ему здоровья!
Но увидев такой объем кода, очень захотелось найти проще, причем длина кода даже сократилась:
1. Можно просто вернуть значение, просчитанное в пользовательском классе:
MyClass MyClass = new MyClass();
textBox_result.Text = MyClass.calculate();
Или вернуть массив/объект, если меняются несколько полей
2. Можно передать из класса Form1 саму форму как "this":
MyClass.calculate(this);
а в пользовательском классе получать полный доступ ко всем элементам:
public void calculate(Form1 FM)
{
FM.Text = "текст";
}
Только надо указать в дизайнере форм для текстового поля (или другого элемента, к которому нужен доступ) свойство Public, но это логично.
Благодаря этому подходу у меня в Form1 только одни вызовы событий, а вся реализация в отдельных классах. Для реализации сложными способами пока необходимости не возникало.
Кстати, если по человечески задать ссылку из класса на форму
Form1 FM = new Form1();
или унаследовать или еще как, а потом написать:
FM.Text = "текст";
Сергей Галичкин
Сергей Галичкин
4 226
Лучший ответ
Не совсем пойму твою архитектуру.
Все действия с массивом заключи в один класс. Выделение памяти, инициализация, операция над массивом, возврат массива в виде текста заключи в методы этого же класса.
В формах оперируй объектом этого класса.
*Размерность - это количество измерений (в данном случае 2). А длинны его строк и столбцов это размер.
Samat Baktybekov
Samat Baktybekov
876