2009-05-27 2 views
3

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

ответ

5

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

У этого есть преимущество, что ваши формы не связаны друг с другом.

+0

Это лучший ответ. Также проверьте шаблон MVC, если вы хотите больше разделения между вашими формами, логикой и данными. –

+0

Где бы вы создали экземпляр класса общих данных? Если он создается формой и передан byref, вам не нужно сохранять форму открытой до тех пор, пока вы не достигнете доступа к данным? –

+0

Вам не нужно оставлять открытую форму открытой, класс не будет собираться мусором, пока не будет выпущена последняя ссылка на него. –

0

Это, по большей части, субъективный вопрос. Я лично взял маршрут, который казался более удобным для людей, которым придется иметь дело с моим кодом позже. Я хотел бы создать экземпляр формы, загрузить публичные свойства с тем, что я пытался передать, а затем сделать вид видимым. Таким образом, любой, кто редактировал новую форму, знал, что все данные были предварительно загружены. Любой, кто редактировал «старую» форму, знал, где загрузить любые новые свойства.

0

Если новой форме понадобятся данные немедленно, то, вероятно, лучше передать ее в конструкторе этой формы.

0

Вы могли бы иметь глобальные переменные данные, которая хранит все данные. Каждая форма может обращаться к нему независимо. Если у вас была многопоточная реализация, вы могли бы просто добавить потокобезопасность для аксессуаров глобальной переменной данных.

0

Два основных варианта, которые я обычно использую, - это либо хранить информацию в базе данных, такую ​​как SQLServer или MS-Access, если имеется много информации, которую будут использовать многие формы, или если информация будет использоваться только в в следующей форме я передам информацию в эту форму, а затем сохраню ее по мере необходимости. то есть, если он создает таблицу данных для ее использования в качестве источника, сохраняет информацию в скрытом поле или даже помещает информацию в текстовые поля, ярлыки, комбинированные поля и т. д., которые им необходимо включить при загрузке.

0

Если вы говорите о winforms (а не в веб-формах), то вы, вероятно, должны использовать static class. Используйте статический член для привязки к объекту контекста (или тому, что вы планируете использовать в других формах). Все статические элементы гарантированно будут инициализированы до их первого использования.

Аналогичной альтернативой могло бы быть использование шаблона проектирования синглтона для создания singleton class.

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

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