Взаимодействие форм
Одним из первых препятствий, с которым сталкиваются новички в 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
Подписаться на:
Комментарии к сообщению (Atom)
9 сентября 2010 г. в 15:32
По умолчанию все элементы, которые размещаются на форме, и так имеют модификатор internal, поэтому к ним изначально можно обращаться из других классов.
10 сентября 2010 г. в 01:52
Artyom Krivokrisenko - это вы из серии вредных советов выдали.
10 сентября 2010 г. в 03:39
Просто констатирую факт, как в Visual Studio по умолчанию работает