|
Прошел курс. Получил код Dreamspark. Ввожу код на сайте, пишет: Срок действия этого кода проверки уже истек. Проверьте, правильно ли введен код. У вас осталось две попытки. Вы также можете выбрать другой способ проверки или предоставить соответствующие документы, подтверждающие ваш академический статус.
Как активировать код? |
Опубликован: 25.03.2010 | Доступ: свободный | Студентов: 1448 / 158 | Оценка: 4.31 / 4.00 | Длительность: 25:42:00
Тема: Программирование
Специальности: Программист, Архитектор программного обеспечения
Лекция 12:
Классы Application и Form
Вывод текста в клиентскую область формы
Для вывода текста в клиентскую область формы применяется функция формы DrawString. Она имеет параметры
- Выводимый текст String
- Объект Font - стиль текста
- Объект Brush - заливка
- Объект Point.x - координата привязки
- Объект 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 не происходит и обработчики не срабатывают, поскольку о восстановлении заголовка заботится сама операционная система. Мы же должны позаботиться о восстановлении клиентской области формы.