C# и Я

О программировании в C#, о себе и немного флуда на разнообразные темы.

Взаимодействия между формами приложения.

Visual C#, Visual Studio, by admin.

1251749552_pic_id313198

Изучение C#медленно. но верно продолжается. Буквально недавно я
приводил пример того, как в Visual C# открыть из одной формы другую. В принципе всё просто.

Сегодня появилась следующая задача: из главной формы приложения запустить модальную форму, эта форма при закрытии должна передать в контролы на главной форме какие-либо данные (текст, значения свойств и т.д.). Решить эту задачу способом, описанном в прошлом посте про формы не представляется возможным, т.к. в этом случае мы просто создаем новый объект формы с новыми значениями всех свойств. Благо в C# есть замечательный сборщик мусора…Но суть не в сборщике, а в том как в C# открыть дочернюю форму, а потом из неё обратно добраться до главной?

Для начала зададимся начальными (исходными) данными.

Итак. У нас есть главная форма приложения:

public partial class fMain : Form
 {
   //описание свойств, методы и т.д.
 }

На этой форме располагается простой TextBox. Назовем его, скажем TBMain. Есть вторая форма:

public partial class fDialog : Form 
{ //описание свойств, методы и т.д. }

На этой форме также находится TextBox с именем TBDialog и кнопка Button по клику на которой мы должны:

  1. Передать значение свойства Text из TBDialog в TBMain;
  2. Закрыть fDialog;

Теперь рассмотрим весь процесс работы по порядку.

option_mofifiersВо-первых, стоит всегда помнить, что по умолчанию для всех свойств, переменных и методов в C# назначается модификатор private – следовательно, чтобы из второй формы добраться до контрола на первой нам необходимо выставить у TBMain модификатор public самостоятельно. Для этого выбираем элемент TBMain в конструкторе формы, переходим в окно свойств и меняем значение свойства Modifiers с private на public.

Теперь TBMain будет виден в других объектах. Движемся далее. Для того, чтобы открыть форму в модальном режиме нам необходимо воспользоваться одним из двух вариантов метода ShowDialog():

public DialogResult ShowDialog();
public DialogResult ShowDialog(IWin32Window owner);

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

Для примера, воспользуемся вторым вариантом метода ShowDialog() и покажем вторую форму модально. Для этого напишем следующее:

fDialog secondForm = new fDialog();
//скрываем форму из панели задач
secondForm.ShowInTaskbar = false;
//устанавливаем форму по центру экрана
secondForm.StartPosition = FormStartPosition.CenterScreen;
//указываем владельца для формы
secondForm.ShowDialog(this);

Здесь я воспользовался снова ключевым словом this, которое указывает на текущий объект, т.е. задал в качестве владельца главную форму (fMain). Теперь переходим непосредственно к решению нашей задаче и ответим на вопрос: как передать значение из одной формы в другую? У каждого контрола имеется замечательное свойство Owner – которое указывает на родителя:

public Form Owner { get; set; }

Всё, что нам необходимо – это воспользоваться приведением типов и привести объект Owner к типу fMain. Пишем такой обработчик клика по кнопке на второй форме:

private void button1_Click(object sender, EventArgs e)
 {
   //привели Owner к fMain и записали текст
   ((fMain)this.Owner).TBMain.Text = textBox1.Text;
   //закрыли форму
   this.Close();
 }

Теперь можете запустить проект и убедиться, что текст из TextBox на дочерней форме прекрасно переносится в TextBox на первой. На всякий случай, выкладываю исходник проекта, рассмотренного в примере: Исходник приложения


Related posts:

  1. Работа с формами в Visual Studio C#.

Back Top

Responses to “Взаимодействия между формами приложения.”

Comments (3) Trackbacks (0) Leave a comment Trackback url
  1. Спасибо, очень помогли!!!

  2. Замечательный пример взаимодействия между формами в C#!

  3. Спасибо, и мне помогли!

  1. No trackbacks yet.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*


детский врач иммунолог, педиатр и невролог, аллерголог, дерматолог, гастроэнтеролог и психолог