//Переменная для хранения нашего нового элемента управления TextBox
//-----------------------------------------------------------------
SocialSecurityTextBox m_filteredTextBox;
//--------------------------------------------------------------
//ОБРАБОТЧИК СОБЫТИЙ: Создать экземпляр нашего пользовательского
// элемента управления и поместить его в форму
//--------------------------------------------------------------
private void button1_Click(object sender, System.EventArgs e) {
//Создать, позиционировать и разместить элемент управления
m_filteredTextBox = new SocialSecurityTextBox();
m_filteredTextBox.Bounds = new System.Drawing.Rectangle(2, 2, 160, 20);
//Подключить обработчик событий
m_filteredTextBox.TextChanged += new EventHandler(this.textBox_TextChanged);
//Задать родительский объект
m_filteredTextBox.Parent =this;
//Выделить элемент управления
m_filteredTextBox.Focus();
//Сделать данную кнопку недоступной, чтобы поверх данного объекта
//не был создан второй объект
SocialSecurityTextBox button1.Enabled = false;
}
//----------------------------------------------------------------
//ОБРАБОТЧИК СОБЫТИЙ: Этот обработчик подключается динамически при
// создании элемента управления
//----------------------------------------------------------------
private void textBox_TextChanged(object sender, System.EventArgs e) {
if (m_filteredTextBox.IsFullValidInput == true) {
label1.Text = "FULL SOCIAL SECURITY NUMBER!!!";
} else {
label1.Text = "Not full input yet...";
}
}
Использование прозрачных областей растровых изображений
Растровые изображения с масками прозрачности полезны по многим причинам. При написании игр растровые изображения с областями прозрачности могут использоваться разработчиками для вывода на экран игрового поля и перемещения по нему изображений, форма которых не является прямоугольной. В картографических приложениях растровые изображения с масками прозрачности могут использоваться для вывода изображений поверх карт, генерируемых другими источниками; в качестве хорошего примера можно привести отображения на карте маркера, отмечающего текущее местоположение объекта. Наконец, встраивание изображений непрямоугольной формы в другую графику может с успехом использоваться для создания привлекательных пользовательских интерфейсов и бизнес-графики.
Растровые изображения, или битовые образы, являются, по сути, двумерными массивами целых чисел, где каждое число представляет цвет пикселя в определенной точке. В силу этого растровые изображения по самой своей природе имеют прямоугольную форму. Представление не являющегося прямоугольным изображения на прямоугольной битовой карте можно обеспечить, объявляя один цвет фоновым и заполняя пиксели, лежащие за пределами интересующего нас непрямоугольного изображения, этим цветом. Работа с правильными прямоугольными массивами обладает целым рядом преимуществ, не самым последним из которых является легкость копирования части одного изображения на часть другого; в случае прямоугольных областей для этого требуются самые простые алгоритмы. В результате копирования прямоугольной части одного растрового изображения на другое происходит простая замена информации об изображении, относящейся к соответствующей прямоугольной области. Это означает, что прямоугольные битовые карты, содержащие непрямоугольные изображения с единственным цветом фона, копируются в место назначения в виде непрозрачных прямоугольников изображений переднего и заднего планов. Результат выглядит совсем не привлекательно. В качестве альтернативного решения можно исходить из фонового изображения и создать на нем рисунок всех непрямоугольных изображений, используя функции рисования (например, DrawLine(), FillCircle()) или устанавливая пиксельные данные по одному пикселю за один раз. Оба эти способа приводят к хорошим визуальным результатам, но работают медленно и требуют написания сложных функций. Что нам необходимо сделать — так это скопировать одно растровое изображения на другое, не копируя фоновый цвет.
На рис. 13.10 представлено простое растровое изображение для игры; битовая карта является прямоугольной, но само изображение, которое мы хотим нарисовать — нет. Чтобы нарисовать это изображение без его прямоугольного фона, мы должны сообщить функции, осуществляющей копирование, о том, что копировать пиксели, цвет которых совпадает с установленным нами фоновым цветом, не следует. В .NET Compact Framework это достигается за счет использования класса ImageAttributes.
Читать дальше