Назад
Создание прибыльного бизнеспроекта на базе сайта

SEO + ASP.NET 4.0 + БИЗНЕСМОДЕЛЬ = ПРИБЫЛЬНЫЙ САЙТ

Инструмент быстрого построения прибыльного онлайн бизнеса своими силами без капиталовложений за 4 месяца все подробности на SEO + ASP.NET 4.0.

Подписка на рассылку

МАГИЯ C#!

Создание вебсайта с формой автоматического приема онлайн платежей по WebMoney!
Ваше имя
Ваш e-mail
Уроки по ASP.NET c# ADO.NET
     

18 видеоуроков
более 5 часов
по созданию сайта,
выполняющего
продажи ваших продуктов (физических/электронных) на полном автомате с личным оповещением на e-mail, а также ...
DVD-курс по C#, .NET

3 часть. Введение в ASP.NET. WebServices Профессиональная подготовка разработчика по языку C# на платформе .NET

asp.net webservices dvd c# gridview Гудок курс Более 65 подробных видео уроков по теоретическим основам технологии сайтостроения ASP.NET и процессу создания и использованию вебсервисов.

DVD-курс по C#, .NET

2А часть. XML/TXT в аспекте ADO.NET Профессиональная подготовка разработчика по языку C# на платформе .NET

xml txt dvd c# ADO ADO.NET Гудок курс 70 подробных видео уроков по работе с форматами xml, txt, по работе с файлами и директориями. Разработка высокоорганизованных свойств для значительного сокращения объема исходного кода и облегчения дальнейшей модификации и многое-многое другое...

DVD-курс по C#, .NET

1 часть. Windows Forms Профессиональная подготовка разработчика по языку C# на платформе .NET

Профессиональная подготовка на c# А. Гудок

185 подробнейших уроков (70 часов) лекций в формате видеоуроков по теории языка c# и платформы .NET. Практическое закрепление теоретического материала на примере создания Windows Forms - приложения видеоигры "Tanks"

DVD-курс по C#, .NET

2 часть. ADO.NET/SQL Профессиональная подготовка разработчика по языку C# на платформе .NET

Профессиональная подготовка на c# А. Гудок ADO.NET sql

165 подробных видео уроков по созданию приложений распределенных баз данных на примере разработки проектов с использований технологий ADO.NET (Connected model, Disconnected model, Typed DataSet, ...)


Я записываю курсы!
  Курс валют

НБУ курс евро






Открытие второй формы и передача данных в главную форму



Вопрос, рассматриваемый в данной статье, скорее относится к теме построения архитектуры приложения, а не конкретно рассматриваемой проблемы. Передавать данные от одной формы в другую вовсе не составляет труда. Для этого достаточно контрол, данные которого мы хотим получить, сделать открытым, то есть пометить модификатором public. Также, возможен и другой вариант. Например, в первой форме мы создаем объект второй формы, передав в конструктор ссылку на себя, то есть, передав из первой формы во вторую ссылку на первую
SecondForm secondForm = new SecondForm(this);
Естественно, перед этим следует позаботиться о создании перегрузки конструктора второй формы.

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

Решение данной проблемы достаточно простое. Обратимся непосредственно к коду. В дизайнере создаем главную форму (она будет запускаться при запуске приложения). Поместим один TextBox, Lable и Button.

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

Аналогично первой, она имеет те же контролы. Больше нам и не надо. Точка входа в приложение запускает главную форму:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;

namespace From1FormTo2
{
    static class Program
    {
        // The main entry point for the application.
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new MainForm());
        }
    }
}

Код главной формы выглядит так:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace From1FormTo2
{
   public partial class MainForm : Form
   {
      //вторая форма
      SecondForm secondForm;

      //конструктор
      public MainForm()
      {
          InitializeComponent();
      }

      //обработчик события передачи данных
      //от главной формы ко второй
      private void btn_mainForm_Click(object sender, EventArgs e)
      {
          secondForm = new SecondForm(tb_mainForm.Text.Trim());
          secondForm.ShowDialog();
          
          if (secondForm.DialogResult == DialogResult.OK)
              tb_mainForm.Text = secondForm.ReturnData();
      }
   }
}

Соответственно, не забудьте подключить кнопку на событие Click. Здесь, в классе главной формы, есть поле SecondForm secondForm, представляющее объект- вторую форму. При нажатии на кнопке «Передать», создается вторая форма (вызывается перегруженный конструктор, его мы еще создадим) и запускается методом ShowDialog(). В данном случае нам подходит именно этот метод. При чем, после этого мы обязательно проверяем, не закрыли ли вторую форму, а выполнили клик по её кнопке. Если, на второй форме был выполнен клик по кнопке, значит первая форма должна принять данные от второй. Это происходит путем вызова метода ReturnData() у второй формы.

Теперь самое интересное – код второй формы:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace From1FormTo2
{
    public partial class SecondForm : Form
    {
        //перегруженный конструктор
        public SecondForm(string data)
        {
            InitializeComponent();
            tb_secondForm.Text = data;
        }

        //обработчик события передачи данных
        //от второй формы к главной
        private void btn_secondForm_Click
                   (object sender, EventArgs e)
        {
            this.DialogResult = DialogResult.OK;
        }

        //открытый метод для доступа к
        //текстовому полю данной формы
        public string ReturnData()
        {
            return (tb_secondForm.Text.Trim());
        }
    }
}

Как видим, имеется единственная перегрузка конструктора, который принимает тип string. Помним, что мы пытаемся передавать текст из TextBox. В конструкторе происходит плановая инициализация компонент и установка текста текстового поля в переданное значение от первой формы. Далее, подписавшись на событие Click для кнопки второй формы, мы создали обработчик btn_secondForm_Click, который и имитирует работу кнопки «Ok» любого диалогового окна. Таким образом, нажимая на кнопке «Отправить» (второй формы), мы приводим в исполнение условие

(secondForm.DialogResult == DialogResult.OK)

первой формы, ввиду чего, вызывая метод secondForm.ReturnData(), мы устанавливаем тектовое поле первой формы в значение тектового поля второй формы.

Работа данного метода, я думаю, уже не требует пояснений. Он просто возвращает текст из единственного текстового поля, при этом, оставляя его приватным.

В итоге, мы передали данные во вторую форму из первой и со второй в первую не нарушая принципы инкапсуляции.

Попробуйте внести текст «ааа» в текстовое поле первой формы и выполнить нажатие на кнопке. Вы увидите в открывшейся второй форме этот текст в её текстовом поле. Попробуйте изменить текст на «ааа ппп» и нажать на кнопку. Вы увидите как после закрытия второй формы данный текст отобразится в текстовом поле главной формы.

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



Больше информации читайте по теме:



Оценить статью:

Оценивая статью, Вы подсказываете нам насколько данная информация стала полезной именно для Вас. Мы ожидаем, прежде всего, оценку доступности материала для понимания и простоты его изложения. Дополнительные комментари, вопросы, дополнения и замечания Вы можете указать на странице От Вас

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


            
        


        Благодарность    18.08.2010 18:01:24
        

Как всегда, все просто и очень просто. Спасибо


        Ульян    24.10.2010 22:19:44
        

Спасибо




Имя:  


Текст комментариев (не больше 600 знаков):  
введите не более 600 знаков



Введите символы с картинки:
Капча имеет "срок годности". Поэтому, если необходимо обновите страницу.



Сантехник срочно
c# курс Гудок   курс по ASP.NET Гудок   курс по ADO.NET Гудок   курс по XML txt Гудок   курс по рефлексии и многопоточности Гудок