Опубликован: 25.03.2010 | Доступ: свободный | Студентов: 1447 / 158 | Оценка: 4.31 / 4.00 | Длительность: 25:42:00
Лекция 12:

Классы Application и Form

Свойства форм

В классе Form определяется много своих свойств, кроме того, он наследует ряд свойств от своих предков, например, от класса Control.

using System;
using System.Windows.Forms;
//using System.Drawing;
  
namespace FirstProject
{
public class ShowForm
{
public ShowForm()
{
}
  
static void Main()
{
Form frm = new Form();
frm.Text = "Свойства формы изменены";
frm.BackColor = Color.Red;
frm.Width *= 2;
frm.Height /= 2;
frm.FormBorderStyle = FormBorderStyle.FixedSingle;
frm.MaximizeBox = false;
frm.Cursor = Cursors.Hand;
frm.StartPosition = FormStartPosition.CenterScreen;
Application.Run(frm);
}
}
}
Листинг 12.15 . Пример изменения свойств формы

Запустим приложение, оно выдаст ошибку, что не может найти класс или структуру Color. Запустим утилиту WinCV и определим, что эта структура находится в пространстве имен System.Drawing


Раскомментируем инструкцию using, подключающую нужное пространство имен System.Drawing к коду. Запустим проект и получим результат


Создание обработчика события Paint

Когда пользователь стучит по клавишам, двигает мышь, нажимает кнопки, щелкает полосы прокрутки и выбирает пункты меню, то постоянно вызываются методы программы со всяческих направлений. Такая модель управления вводом кажется хаотичной, но на практике все оказывается более упорядоченным, так как все вызовы методов выполняются в одном потоке в порядке следования. Часто удобно представлять программы для Windows Forms как конечные автоматы, состояние которых целиком определяется изменениями, вносимыми событиями.

Одним из важных событий в Windows Forms является событие Paint. Оно сообщает системе о том, что пришла пора перерисовать окно формы, в том числе ее клиентскую часть. Программист сам должен заботится о том, чтобы было чем перерисовать клиентскую область. Для этих целей нужно запоминать всю нужную информацию, чтобы обработчик Paint мог в любой момент ее использовать для перерисовке окна.

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

using System;
using System.Windows.Forms;
using System.Drawing;
  
namespace FirstProject
{
public class ShowForm
{
static void Main()
{
Form frm = new Form();
frm.Text = "Испытание события Paint";
frm.BackColor = Color.Yellow;
frm.Width *= 2;
frm.Height /= 2;
frm.Paint += new PaintEventHandler(frm_Paint); // Набрать вручную !!!  
Application.Run(frm);
}
  
static int count = 0;
  
private static void frm_Paint(object sender,
  PaintEventArgs e)
{
Color color;
  
if(count == 0)
{
count++;
return;
}
else if(count % 2 == 0)
  color = Color.Red;
else
color = Color.Blue;
  
System.Drawing.Graphics gr = e.Graphics;
gr.Clear(color);
Console.WriteLine("Произошло {0} событие Paint формы",
++count);
}
}
}
Листинг 12.16 . Пример создания обработчика события Paint формы

Разделение кода на отдельные классы

Принято (но не обязательно) каждый новый класс размещать в отдельном файле.

  • Переименуйте функцию Main() в классе ShowForm на Execute () с заменой static на public
  • Переименуйте первый класс с ShowForm на BaseClass
  • Переименуйте файл ShowForm.cs на BaseClass.cs
  • Добавьте к проекту новый класс

  • Задайте имя класса StartClass

  • Удалите конструктор по-умолчанию из класса StartClass и добавьте функцию Main(), в которой разместите код создания экземпляра ( instance ) первого класса и вызов функции Execute()
using System;
  
namespace FirstProject
{
public class StartClass
{
// Создать экземпляр базового класса
BaseClass instance = new BaseClass();
  
// Выполнить экземпляр базового класса
instance.Execute();
}
}
Листинг 12.17 . Код класса StartClass

Окончательный код будет таким

using System;
using System.Windows.Forms;
using System.Drawing;
  
namespace FirstProject
{
  public class BaseClass
  {
  public void Execute()
  {
  Form frm = new Form();
  frm.Text = "Разбивка кода на два класса";
  frm.BackColor = Color.Yellow;
  frm.Width *= 2;
  frm.Height /= 2;
  frm.Paint += new PaintEventHandler(frm_Paint);
  
  Application.Run(frm);
  }
  
  static int count = 0;
  
  private static void frm_Paint(object sender,
    PaintEventArgs e)
  {
  Color color;
  
  if(count == 0)
  {
  Console.WriteLine("Произошло {0} событие Paint формы",
        ++count);
        return;
  }
  else if(count % 2 == 0)
    color = Color.Red;
  else
    color = Color.Blue;
  
  System.Drawing.Graphics gr = e.Graphics;
    gr.Clear(color);
  Console.WriteLine("Произошло {0} событие Paint формы",
      ++count);
  }
}
}
Листинг 12.18 . Окончательный код класса BaseClass
Максим Филатов
Максим Филатов

Прошел курс. Получил код Dreamspark. Ввожу код на сайте, пишет:

Срок действия этого кода проверки уже истек. Проверьте, правильно ли введен код. У вас осталось две попытки. Вы также можете выбрать другой способ проверки или предоставить соответствующие документы, подтверждающие ваш академический статус.

 

Как активировать код?