netlib.narod.ru< Назад | Оглавление | Далее >

Наследование форм

Итак, вы уже научились создавать формы, присваивать значения их свойствам (например, тексту заголовка или цвету фона), подключать обработчики событий. Если вы можете подключить обработчик события Paint, значит, можете подключить обработчики событий клавиатуры, мыши, меню и т.д.

Но боюсь, придется сказать горькую правду: обычно все делается не так.

Чтобы полностью использовать мощь класса Form, вы должны не просто создать форму. Вы должны ее сотворить. Control родил ScrollableControl, ScrollableControl родил ContainerControl, a ContainerControl родил Form, и теперь Form может породить воистину поразительные формы — вы только должны указать, какими они будут.

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

InheritTheForm.cs

  //-------------------------------------------------
  // InheritTheForm.cs (C) 2001 by Charles Petzold
  //-------------------------------------------------
  using System;
  using System.Drawing;
  using System.Windows.Forms;

  class InheritTheForm: Form
  {
      public static void Main()
      {
          InheritTheForm form = new InheritTheForm();
          form.Text = "Inherit The Form";
          form.BackColor = Color.White;

          Application.Run(form);
      }
  }

Обратите внимание на инструкцию class:

  class InheritTheForm: Form

Часть : Form, которая идет за именем класса, означает, что InheritTheForm является наследником Form и наследует все методы и свойства Form.

Как и раньше, этот класс содержит статический метод Main, являющийся точкой входа в программу. Однако в Main создается новый экземпляр InheritTheForm, a не Form. Так как InheritTheForm — наследник Form, у него также имеются свойства Text и BackColor, которым в программе присваиваются значения. Объект типа Form можно передавать в качестве параметра методу Application.Run, значит, и любой объект типа, унаследованного от Form, можно передавать как параметр Application.Run.

Программа InheritTheForm создает форму, выполняет инициализацию, которая в данном случае заключается в присваивании значения свойству Text, затем вызывает Application.Run, передавая созданную форму как параметр. Более традиционный подход заключается в переносе инициализации формы в конструктор класса.

InheritWithConstructor.cs

  //---------------------------------------------------------
  // InheritWithConstructor.cs (C) 2001 by Charles Petzold
  //---------------------------------------------------------
  using System;
  using System.Drawing;
  using System.Windows.Forms;

  class InheritWithConstructor: Form
  {
      public static void Main()
      {
          Application.Run(new InheritWithConstructor());
      }
      public InheritWithConstructor()
      {
          Text = "Inherit with Constructor";
          BackColor = Color.White;
  }

Напоминаю, что для конструктора не указывается тип возвращаемого значения и что у конструктора по умолчанию пустой список параметров.

Родословная Form начинается с Object и содержит еще пять классов. Когда в Main создается объект InheritWithConstructor, сначала вызывается конструктор по умолчанию класса Object, затем — конструктор по умолчанию класса MarshalByRefObject и т.д. до конструктора по умолчанию класса Form, и, наконец, последним вызывается конструктор по умолчанию класса InheritWithConstructor.

Заметьте, что я не указывал перед свойствами Text и BackColor имя объекта, который в предыдущих программах этой главы назывался form. Перед этими свойствами ничего не нужно ставить, так как это свойства класса InheritWithConstructor. Они являются свойствами InheritWithConstructor, так как этот класс происходит от классов Control и Form, в которых изначально определены эти свойства.

Если бы я захотел что-нибудь поставить перед этими свойствами, то это было бы ключевое слово this:

  this.Text = "Inherit with Constructor";
  this.BackColor = Color.White;

Ключевое слово this означает текущий объект.


netlib.narod.ru< Назад | Оглавление | Далее >

Сайт управляется системой uCoz