Прошел курс. Получил код Dreamspark. Ввожу код на сайте, пишет: Срок действия этого кода проверки уже истек. Проверьте, правильно ли введен код. У вас осталось две попытки. Вы также можете выбрать другой способ проверки или предоставить соответствующие документы, подтверждающие ваш академический статус.
Как активировать код? |
Опубликован: 25.03.2010 | Уровень: для всех | Доступ: платный
Лекция 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 не происходит и обработчики не срабатывают, поскольку о восстановлении заголовка заботится сама операционная система. Мы же должны позаботиться о восстановлении клиентской области формы.