2010-10-10 2 views
1

У меня есть две формы: Form1 и Form2. Я могу получить содержимое списка в Form1 в другой список в Form2, вызвав новый Form2 и передав значения. Я обновляю List в form2, скажем, удаляя из него элемент. Как передать содержимое списка Form2 BACK в исходный список в Form1? Form1 - это первая форма, которая появляется при запуске приложения, поэтому я не хочу вызывать новый экземпляр формы.Передача значения обратно в первоначальную форму

+0

Какой у вас код для отображения 'form2'? – ChrisF

ответ

1

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

// A property `Form2` 
public Form1 RefToForm1 { get; set; } 

// On form 1, after initializing `Form2`: 
Form2 frm2 = new Form2(); 
frm2.RefToForm1 = this; 

Примечание:

Есть лучшее решение, чем выше (это быстро и грязно). Лучшим вариантом было бы создать свойство на Form2 с типом данных, которые необходимы в Form1 и получить доступ к данным через него:

// A property `Form2` 
public List<int> Form2DataForForm1 { get; set; } 

// On form 1 
var dataFromForm2 = frm2.Form2DataForForm1; 
+2

Я нахожу, что это решение создает двухстороннюю зависимость между Form1 и Form2. Я предпочел бы избежать того, чтобы Form2 зависел от Form1; см. мой ответ на этой странице. – CesarGon

+0

Спасибо, что сработало безумное очарование. Еще раз спасибо. –

+0

@CesarGon - зависимость уже существует. Сделать это двунаправленным не делает вещи хуже (на мой взгляд) и делает отношения более явными (тот факт, что данные должны путешествовать в обоих направлениях). – Oded

2

Я предлагаю вам реализовать недвижимость в Form2, которая возвращает соответствующие данные, и иметь Form1 читает это свойство, «вытягивая» данные из формы 2.

Это лучше, чем Form2 «надавить» данные обратно в Form1, поскольку он сохраняет зависимости только в одну сторону.

+0

Ни толкание, ни вытаскивание по своей сути лучше. Для притяжения используйте свойства, описанные в Cesar. Для push используйте события. –

+0

@Ben: Я согласен, ни толкание, ни вытаскивание по своей сути лучше. Но однонаправленная зависимость лучше, чем двунаправленная. Продвижение события может поддерживать зависимости только в одну сторону, что хорошо. – CesarGon

+0

Лучше, если бы вы могли предоставить код в понимании лучшего – venkat

Смежные вопросы