Книга: Программирование мобильных устройств на платформе .NET Compact Framework
Листинг 11.9. Простой пользовательский элемент управления, который изменяет цвета и запускает событие, определяемое пользователем
Листинг 11.9. Простой пользовательский элемент управления, который изменяет цвета и запускает событие, определяемое пользователем
//Простейший пользовательский элемент управления
public class myButton : System.Windows.Forms.Control {
//--------------------------------------
//Объекты, необходимые нам для рисования
//--------------------------------------
System.Drawing.Brush m_RectangleBrush;
System.Drawing.Brush m_TextBrush;
System.Drawing.Color m_RectangleColor;
//----------------------------------------------------
//Событие, которое мы хотим предоставить на обработку.
//Это - общедоступный делегат.
//----------------------------------------------------
public event System.EventHandler EventButtonTurningBlue;
//Конструктор
public myButton() : base() {
//ПРИМЕЧАНИЕ: Мы должны написать функцию Dispose() и
//деструктор, который освобождает память от этих объектов
//Создать необходимые кисти
m_RectangleColor = System.Drawing.Color.Black;
m_RectangleBrush = new System.Drawing.SolidBrush(m_RectangleColor);
m_TextBrush = new System.Drawing.SolidBrush(System.Drawing.Color.White);
}
//-----------------------------------------------
//Внутренним откликом на щелчок является
//повторение трех различных цветов кнопки в цикле
//-----------------------------------------------
protected override void OnClick(System.EventArgs e) {
//--------------------------------------------------------
//Важно: Вызвать базовую реализацию. Это
//обеспечит возможность вызова любого обработчика событий,
//подключенного к данному элементу управления
//--------------------------------------------------------
base.OnClick(e);
//------------------------------------------------------
//Выбрать цвет новой кисти, исходя из цвета старой кисти
//------------------------------------------------------
if (m_RectangleColor == System.Drawing.Color.Black) {
m_RectangleColor = System.Drawing.Color.Blue;
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
//Запустить событие !
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
if (EventButtonTurningBlue!= null) {
//Возбудить событие без передачи аргумента
EventButtonTurningBlue(this, null);
}
}
else
if (m_RectangleColor == System.Drawing.Color.Blue) m_RectangleColor = System.Drawing.Color.Red;
else m_RectangleColor = System.Drawing.Color.Black;
//-----------------------
//Освободить старую кисть
//-----------------------
m_RectangleBrush.Dispose();
//----------------------------------------------------------------
//Создать новую кисть, которую мы собираемся использовать для фона
//----------------------------------------------------------------
m_RectangleBrush = new System.Drawing.SolidBrush(m_RectangleColor);
//------------------------------------------------------------
//Сообщить операционной системе, что наш элемент управления
//должен быть перерисован, как только представится возможность
//------------------------------------------------------------
this.Invalidate();
}
//----------------------------------------------------------------
//Ради интереса подсчитаем, сколько раз осуществлялась перерисовка
//----------------------------------------------------------------
int m_paintCount;
protected override void OnPaint(System.Windows.Forms.PaintEventArgs e) {
//--------------------------------------------
//ВАЖНО: Вызвать базовый класс и позволить ему
//выполнить работу по рисованию
//--------------------------------------------
base.OnPaint(e);
//Увеличить на единицу значение счетчика вызовов
m_paintCount = m_paintCount + 1;
//-------------------------------------------------------------------
//Важно:
//Вместо того чтобы создавать объект Graphics, мы получаем его
//на время данного вызова. Это означает, что освобождать память путем
//вызова метода .Dispose() объекта - не наша забота
//-------------------------------------------------------------------
System.Drawing.Graphics myGfx;
myGfx = e.Graphics;
//Нарисовать прямоугольник
myGfx.FillRectangle(m_RectangleBrush, 0, 0, this.Width,this.Height);
//Нарисовать текст
myGfx.DrawString("Button! Paint: " + m_paintCount.ToString(), this.Parent.Font, m_TextBrush, 0, 0);
} //конец функции
} //конец класса
- Отображение растровых изображений в элементе управления PictureBox
- Листинг 11.6. Создание изображения на внеэкранной растровой поверхности и передача его в элемент управления PictureBox
- Рисование непосредственно в форме
- Листинг 11.7. Создание объекта Graphics для формы
- Листинг 11.8. Подключение к функции Paint формы
- Обработчики событий или перекрытые функции?
- Реализация пользовательских элементов управления
- Листинг 11.9. Простой пользовательский элемент управления, который изменяет цвета и запускает событие, определяемое пользователем
- Листинг 11.10. Код, который должен быть помещен в форму для создания экземпляра пользовательского элемента управления
- Листинг 10.1. (simpleid.c) Отображение идентификаторов пользователя и группы
- СТРУКТУРА ПРОСТОЙ ПРОГРАММЫ
- Основные "рычаги" управления производительностью
- ПРИМЕР ПРОСТОЙ ПРОГРАММЫ НА ЯЗЫКЕ СИ
- Категорийный менеджмент. Курс управления ассортиментом в рознице
- Создание свободно позиционируемых элементов
- 6.4. Рабочий лист Excel и его структурные элементы
- Листинг 15.11. Код для загрузки файла с Web-сервера
- Письма с элементами графики и вложениями
- 1. Системы управления базами данных
- 2. Пользовательский тип данных
- Элемент STYLE