Чтение онлайн

ЖАНРЫ

Программирование мобильных устройств на платформе .NET Compact Framework
Шрифт:

НА ЗАМЕТКУ

Существует возможность сделать пользовательский элемент управления видимым на стадии проектирования!

В данном примере пользовательский элемент управления для простоты создается во время выполнения. Чтобы отобразить его для разработчика на стадии проектирования, в результате чего этот элемент управления будет виден в окне конструктора форм подобно любому другому стандартному элементу управления, в приложение следует кое-что добавить. Обсуждение этого вопроса выходит за рамки данной книги, однако соответствующая информация содержится в документации по .NET Compact Framework.Окно сообщения, появляющееся в ответ на запуск события щелчка на пользовательском элементе управления

Рис. 11.6. Окно сообщения, появляющееся в ответ на запуск события щелчка на пользовательском элементе управления

Для создания и запуска данного приложения потребуется выполнить следующие действия:

1. Начните новый проект Smart Device в Visual Studio NET и выберите в качестве целевой платформы Pocket PC.

2. Добавьте в проект новый класс и назовите его myButton. Перейдя в окно редактора кода класса введите код, представленный в листинге 11.9.

3. Перейдите в окно конструктора форм для формы Form1. Добавьте в форму кнопку. Дважды щелкните на кнопке для перехода в окно редактора кода и введите код, представленный в обработчике события button1_Click в листинге 11.10.

4. Введите за кодом обработчика события button1_Click оставшуюся часть кода, представленного в листинге 11.10.

5. Скомпилируйте пример и запустите его на выполнение. Щелкните на кнопке Button1.

Листинг 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);

//------------------------------------------------------------

//Сообщить операционной системе, что наш элемент управления

//должен быть перерисован, как только представится возможность

Поделиться с друзьями: