Какова лучшая практика для общения форм? - PullRequest
0 голосов
/ 23 августа 2011

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

Form2 form = new Form2(this);
form.ShowDialog();

А внутри Form2.cs я использую конструктор типа:

private Form1 parent;
public Form2(Form1 form)
{
   ...
   parent = form;
}

Таким образом, я могу получить информацию из текстового поля, используя parent.textbox1.Text, только если textbox1 не является закрытым участником из Form1.Хорошо, много времени мне нужно, чтобы получить информацию об элементах управления в Form1. Должен ли я устанавливать и использовать методы установки и получения для каждого атрибута элемента управления, необходимого в Form2?Например: мне нужно знать значения Text, ReadOnly и Location.Должен ли я сделать сеттеры и геттеры для каждого из этих атрибутов?Является ли использование внутреннего модификатора плохой практикой?

Ответы [ 3 ]

2 голосов
/ 23 августа 2011

Правильный способ сделать это с делегатами.Они на самом деле довольно простые, но нужно время, чтобы разобраться с ними.Вот отличный пример того, что, я думаю, вы ищете: http://samgaut.blogspot.com/2007/11/use-delegates-to-pass-data-between.html

1 голос
/ 29 апреля 2016

Поскольку мне не разрешено добавлять комментарии к ответам, я собираюсь добавить это.

Связанное сообщение в блоге с принятым ответом не имеет смысла для меня (может быть, просто отсутствие у меня полного понимания делегатов).

Если следующая строчная форма frmDestination имеет общедоступный метод установки (SetCustomerID(string strCustID)), то зачем вам передавать его в делегат, когда вы можете просто передать customerID непосредственно в установщик?

Я заметил, что он упомянул, что

По сути, переменная-член, установленная в методе делегата, будет заполнена до выполнения события Form_Load. Если вы заметили, что вызов делегата выполняется до вызова frmDestination.Show (). Таким образом, у вас есть эта переменная, доступная для выполнения при обработке Form_Load.

Разве просто позвонить dest.SetCustomerID(customerID) до того, как dest.Show() не сделает то же самое?

0 голосов
/ 23 августа 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...