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

Классы Application и Form

Вывод текста в клиентскую область формы

Для вывода текста в клиентскую область формы применяется функция формы DrawString. Она имеет параметры

  1. Выводимый текст String
  2. Объект Font - стиль текста
  3. Объект Brush - заливка
  4. Объект Point.x - координата привязки
  5. Объект Point.y - координата привязки
using System;
using System.Windows.Forms;
using System.Drawing;
  
namespace FirstProject
{
public class FirstClass
{
static void Main()
{
// Создаем рабочий экземпляр на управляемой куче
new FirstClass();
}
  
public FirstClass()
{
StartFun();
}
  
static void StartFun()
{
Form frm = new Form();
frm.Text = "Вывод текста";
frm.BackColor = Color.Blue;
  
frm.Paint += new PaintEventHandler(frm_Paint);
  
Application.Run(frm);
}
  
static int count = 0;
private static void frm_Paint(object sender,
  PaintEventArgs e)
{
System.Drawing.Graphics gr = e.Graphics;
// Приведение типа переданной ссылки 
// на форму - отправителя
Control refControl = (Control) sender; 
  gr.DrawString("Привет из обработчика Paint !!!",
      refControl.Font, Brushes.White, 0, 0);
Console.WriteLine("Перерисовка текста {0}",
    ++count);
}
}
}
Листинг 12.19 . Пример вывода текста в клиентскую область формы

Применение одного обработчика для нескольких форм

  • Измените код класса FirstClass как показано
using System;
using System.Windows.Forms;
using System.Drawing;
  
namespace FirstProject
{
  public class FirstClass
  {
  private static Form parent, child;
  
  static void Main()
  {
  parent = new Form();
  parent.Text = "Главное окно";
  parent.Height /= 4;
  parent.BackColor = Color.Red; 
  parent.Paint += new PaintEventHandler(frm_Paint);
  
  child = new Form();
  child.Text = "Дочернее окно";
  child.Height /= 4;
  child.BackColor = Color.Yellow;
  child.Show();
  // Набрать вручную !!!
  child.Paint += new PaintEventHandler(frm_Paint);
  
  Application.Run(parent);
  }
  
  private static void frm_Paint(object sender, PaintEventArgs e)
  {
  System.Drawing.Graphics gr = e.Graphics;
  // Приведение типа переданной ссылки на форму
  Form refForm = (Form) sender; 
  
  System.String str, strWhat;
  if(refForm == parent)
  {
  str = "Привет из главной формы";
    strWhat = "главная";
  }
  else
  {
  str = "Привет из дочерней формы";
      strWhat = "дочерняя";
  }
  
  gr.DrawString(str, refForm.Font, Brushes.Black, 0, 0);
  Console.WriteLine("Перерисована {0} форма", strWhat);
  }
}
}
Листинг 12.20 . Пример кода для перерисовки двух форм одним обработчиком

Применение нескольких обработчиков для одной формы

Сейчас мы продемонстрируем интересную особенность подключенных обработчиков:

Если для обработки одного и того же события к форме подключено несколько обработчиков, то обработчики вызываются все в порядке их создания!

using System;
using System.Windows.Forms;
using System.Drawing;
  
namespace FirstProject
{
  public class FirstClass
  {
  static void Main()
  {
  Form frm = new Form();
  frm.Text = "Несколько обработчиков Paint";
  frm.BackColor = Color.White;
  frm.Width = 250;
  frm.Height = 100;
  frm.Paint += new PaintEventHandler(frm_Paint1);
  frm.Paint += new PaintEventHandler(frm_Paint2);
  
  Application.Run(frm);
  }
  
  private static void frm_Paint1(object sender, PaintEventArgs e)
  {
  System.Drawing.Graphics gr = e.Graphics;
  // Приведение типа переданной ссылки на форму
  Form refForm = (Form) sender; 
  System.String str = "Привет из обработчика Paint1";
  
  System.Int32 x = 0, y = 0;
  gr.DrawString(str, refForm.Font, Brushes.Red, x, y);
  Console.WriteLine("Сработал обработчик Paint1");
  }
  
  private static void frm_Paint2(object sender, PaintEventArgs e)
  {
  System.Drawing.Graphics gr = e.Graphics;
  // Приведение типа переданной ссылки на форму
  Form refForm = (Form) sender; 
  System.String str = "Привет из обработчика Paint2";
  
  System.Int32 x = 0, y = 40;
  gr.DrawString(str, refForm.Font, Brushes.Blue, x, y);
  Console.WriteLine("Сработал обработчик Paint2");
  }
}
}
Листинг 12.21 . Код подключения к событию формы нескольких обработчиков

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

Максим Филатов
Максим Филатов

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

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

 

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