Опубликован: 25.03.2010 | Уровень: для всех | Доступ: платный
Лекция 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. Ввожу код на сайте, пишет:

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

 

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

Денис Пашков
Денис Пашков
Россия
Татьяна Ковалюк
Татьяна Ковалюк
Украина, Киев, Киевский политехнический институт, 1974