Взаимодействие форм

     Одним из первых препятствий, с которым сталкиваются новички в C#  - это взаимодействие одной формы с другой. Например, мы нажимаем кнопку на главной форме, у нас открывается другая форма, производим настройки и возвращаемся в главную форму.
Первое, что вы должны понять, при работе с .NET Framework – это то что все реализовано через классы. Формы не исключение. Каждая форма представляет собой класс, где можно не только написать события в ответ на элементы управления, можно добавить дополнительный код, например, класс переменных, свойств и методов. Это дает нам, программистам, возможность добавить дополнительную функциональность формы. Если Вы уже бывали на форумах, то возможно видели ответы на этот вопрос: «создайте свойство или метод и вызовите из другой формы». Это замечательно, но что именно подразумевается под этим?


     Как я уже отметил, формы являются классами, а это означает, что вы можете добавить методы и свойства для них. Сделать их public и тогда другие классы смогут получить к ним доступ. Это означает, добавив public свойство  или в метод одну форму, другие формы могут использовать эти свойства / методы для взаимодействия.
В нашем примере будут две формы. Одну назовем frmMain это будет родительская форма. Эта форма будет содержать простую надпись, текстовое поле(tbMainText) и кнопку для вызова второй формы, которую мы назовем frmChild. frmChild имеет также надпись, текстовое поле(tbChildText) и кнопку для закрытия формы и вернуть результат.
     Давайте реализуем свойство, которое позволит общаться с текстовым полем дочерней формы.

public String ChildText 
{
get { return tbChildText.Text; }
set { tbChildText.Text = value;
}

     Теперь у нас есть свойство ChildText. Отмечу что оно у нас объявлено как public. Это свойство взаимодействует с текстовым полем.
     И код кнопки OK:

private void btnChildOK_Click(object sender, EventArgs e)
{
this.DialogResult = DialogResult.OK;
}

     Говорит главной форме что мы возвращаем результат OK.
     Теперь вернемся к главной форме и напишем обработчик кнопки Открыть:

private void btnOpenChild_Click(object sender, EventArgs e) 
{
//создаем экзмепляр дочерней формы и посылаем ей данные.
frmChild child = new frmChild();
child.ChildText = "Text Sent From Parent";

// Теперь показываем форму как диалоговое. Если возвращается результат OK, используем
// свойство чтобы считать данные и вставить их в текстовое поле главной формы.
if (child.ShowDialog() == DialogResult.OK) {
txtFromChild.Text = child.ChildText;
}
}

     Второй способ это создание методов(аналогично).
     Третий способ это сделать элементы управления public, этого делать крайне не реомендуется, потому что можно непреднамеренно что то изменить, так же это нарушает принцип ООП.

3

  1. Artyom Krivokrisenko комментирует...:

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

  1. Анонимный комментирует...:

    Artyom Krivokrisenko - это вы из серии вредных советов выдали.

  1. Artyom Krivokrisenko комментирует...:

    Просто констатирую факт, как в Visual Studio по умолчанию работает

Отправить комментарий