Файл: 1_C#_Введение_в_программирование_Уч_пособ_(Марченко-2005).pdf
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 11.12.2025
Просмотров: 1380
Скачиваний: 3
Clone |
|
|
Создает точную копию объекта Region. |
|
|
|||||||||
|
|
|
Обновляет |
|
объект |
Region, |
чтобы |
включить |
||||||
Complement |
|
|
|
|||||||||||
|
|
|
часть указанной структуры RectangleF, не |
|||||||||||
|
|
|
пересекающуюся с объектом Region. |
|
|
|
||||||||
CreateObjRef |
(унаследовано |
от |
Создает |
объект, |
который |
|
содержит |
всю |
||||||
MarshalByRefObject) |
|
|
необходимую |
информацию |
|
для |
|
создания |
||||||
|
|
|
прокси-сервера, |
используемого |
|
для |
||||||||
|
|
|
коммуникации с удаленными объектами. |
|
|
|||||||||
Dispose |
|
|
Освобождает все ресурсы, используемые |
|||||||||||
|
|
|
объектом Region. |
|
|
|
|
|
|
|
|
|||
Equals |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Обновляет |
|
объект |
Region, |
чтобы |
включить |
||||||
Exclude |
|
|
|
|||||||||||
|
|
|
часть |
его |
внутренней |
|
части, |
|
не |
|||||
|
|
|
пересекающуюся с указанной структурой |
|||||||||||
|
|
|
Rectangle. |
|
|
|
|
|
|
|
|
|
|
|
FromHrgn |
|
|
Инициализирует |
новый |
объект |
Region |
из |
|||||||
|
|
|
дескриптора указанной существующей области |
|||||||||||
|
|
|
GDI. |
|
|
|
|
|
|
|
|
|
|
|
GetBounds |
|
|
Возвращает |
|
структуру |
|
|
RectangleF, |
||||||
|
|
|
представляющую |
|
объект |
|
прямоугольник, |
|||||||
|
|
|
ограничивающий |
|
|
Region |
|
на |
||||||
|
|
|
поверхности рисунка объекта Graphics. |
|
||||||||||
GetHashCode (унаследовано от Object) |
|
Служит хеш-функцией для конкретного |
типа, |
|||||||||||
|
|
|
пригоден |
для |
использования |
в |
алгоритмах |
|||||||
|
|
|
хеширования и структурах данных, |
например |
||||||||||
|
|
|
в хеш-таблице. |
|
|
|
|
|
|
|
|
|
||
GetHrgn |
|
|
Возвращает дескриптор Windows для объекта |
|||||||||||
|
|
|
Region в указанном графическом контексте. |
|||||||||||
GetLifetimeService |
(унаследовано |
от |
Извлекает |
|
служебный объект |
|
текущего |
срока |
||||||
MarshalByRefObject) |
|
|
действия, который управляет средствами |
|||||||||||
|
|
|
срока действия данного экземпляра. |
|
|
|||||||||
GetRegionData |
|
|
Возвращает |
|
|
объект |
|
|
RegionData, |
|||||
|
|
|
представляющий данные, описывающие объект |
|||||||||||
|
|
|
Region. |
|
|
|
|
|
|
|
|
|
|
|
GetRegionScans |
|
|
Возвращает массив структур RectangleF, |
|||||||||||
|
|
|
аппроксимирующих объект Region. |
|
|
|
|
|||||||
GetType (унаследовано от Object) |
|
Возвращает Type текущего экземпляра. |
|
|
||||||||||
|
|
Получает |
служебный объект |
срока |
действия, |
|||||||||
InitializeLifetimeService (унаследовано |
от |
|||||||||||||
MarshalByRefObject) |
|
|
для управления средствами срока действия |
|||||||||||
|
|
|
данного экземпляра. |
|
|
|
|
|
|
|
||||
Intersect |
|
|
Заменяет объект Region на |
его |
пересечение |
|||||||||
|
|
|
с указанным объектом Region. |
|
|
|
|
|||||||
IsEmpty |
|
|
Проверяет, |
имеет |
ли |
объект |
Region |
пустую |
||||||
|
|
|
внутреннюю часть на указанной поверхности |
|||||||||||
|
|
|
рисунка. |
|
|
|
|
|
|
|
|
|
|
|
IsInfinite |
|
|
Проверяет, |
имеет |
ли |
объект |
Region |
пустую |
||||||
|
|
|
внутреннюю часть на указанной поверхности |
|||||||||||
|
|
|
рисунка. |
|
|
|
|
|
|
|
|
|
|
|
IsVisible |
|
|
Проверяет, |
содержится |
ли |
|
указанный |
|||||||
|
|
|
прямоугольник в объекте Region. |
|
|
|
|
|||||||
MakeEmpty |
|
|
Инициализирует объект Region для пустой |
|||||||||||
|
|
|
внутренней части. |
|
|
|
|
|
|
|
|
|||
MakeInfinite |
|
|
Инициализирует |
|
объект |
|
Region |
|
для |
|||||
|
|
|
бесконечной внутренней части. |
|
|
|
|
|||||||
ToString (унаследовано от Object) |
|
Возвращает String, который представляет |
||||||||||||
|
|
|
текущий Object. |
|
|
|
|
|
|
|
|
|||
Transform |
|
|
Преобразует этот объект Region с помощью |
|||||||||||
|
|
|
указанного объекта Matrix. |
|
|
|
|
|
|
|||||
Translate |
|
|
Смещает координаты объекта Region на |
|||||||||||
|
|
|
указанную величину. |
|
|
|
|
|
|
|
||||
Union |
|
|
Заменяет объект Region на |
его |
объединение |
|||||||||
|
|
|
с указанным объектом GraphicsPath. |
|
|
|||||||||
Xor |
|
|
Заменяет |
|
объект |
Region |
|
на |
|
разность |
||||
|
|
|
объединения и его пересечения с указанным |
|||||||||||
|
|
|
объектом GraphicsPath. |
|
|
|
|
|
|
|||||
Защищенные методы |
|
Переопределен. См. Object.Finalize. |
|
|
||||||||||
Finalize |
|
|
|
|
||||||||||
198
MemberwiseClone (унаследовано от Object)
В языках C# и C++ для функций финализации используется синтаксис деструктора. Создает неполную копию текущего Object.
Применение классов GraphicsPath и Region. Круглая форма
using System;
using System.Drawing;
using System.Drawing.Drawing2D; using System.Collections; using System.ComponentModel; using System.Windows.Forms;
namespace StrangeControls
{
///<summary>
///Объявляется класс-наследник базового класса Form.
///Наша форма, конечно же, основывается на обычной классической
///прямоугольной, масштабируемой форме.
///Прежде всего, это означает,что у неё имеется свойство Size,
///значения которого используются для определения размеров
///составляющих нашу форму элементов.
///Наша форма состоит из двух элементов:
///Прямоугольника-заголовка (здесь должны размещаться основные элементы управления формы).
///Эллипсовидной клиентской области с голубой каёмочкой.
///</summary>
public class RoundForm : System.Windows.Forms.Form
{
private System.ComponentModel.Container components = null;
//Объект headSize используется для управления размерами формы. private Size headSize;
//bw - (border width) это переменная,
//сохраняющая метрические характеристики рамки.
//В дальнейшем это значение используется для определения
//размеров нашей формы.
int bw;
// Ничем не примечательный конструктор...
public RoundForm()
{
InitializeComponent();
}
#region Windows Form Designer generated code
///<summary>
///Required method for Designer support - do not modify
///the contents of this method with the code editor.
///</summary>
private void InitializeComponent()
{
//
// RoundForm
//
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); this.ClientSize = new System.Drawing.Size(292, 273); this.Cursor = System.Windows.Forms.Cursors.Cross; this.MinimumSize = new System.Drawing.Size(100, 100); this.Name = "RoundForm";
this.Text = "RoundForm";
this.Resize += new System.EventHandler(this.RoundForm_Resize);
}
#endregion
///<summary>
///Clean up any resources being used.
199
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if(components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
//Обработчик события, связанного с изменением формы окна обеспечивает
//вызов метода, в котором определяются основные характеристики
//составляющих формы.
private void RoundForm_Resize(object sender, System.EventArgs e)
{
SetSize();
}
//Код, определяюший габариты ФОРМЫ - весь здесь...
//Это определение метрических характеристик ФОРМЫ. protected void SetSize()
{
//Всего ничего...
//На основе соответствующей "классической" формы
//определяются размеры прямоугольной составляющей (заголовка формы). int w = this.Size.Width;
bw = (int)((w - this.ClientSize.Width)/2); int h = this.Size.Height;
int bh = h - this.ClientSize.Height - bw; headSize = new Size(w,bh);
}
//В рамках переопределённой виртуальной функции...
protected override void OnPaint(PaintEventArgs e)
{
//Определяем габариты формы.
SetSize();
//Получаем ссылку на графический контекст. Graphics gr = this.CreateGraphics();
//Карандаш для отрисовки каёмочки.
Pen pen = new Pen(SystemColors.Desktop,bw);
//Объект, поддерживающий контуры формы. GraphicsPath gp = new GraphicsPath();
//Контуры формы образуются прямоугольником
//(его характеристики совпадают с заголовком формы).
//класс GraphicsPath не имеет метода, который позволял
//бы непосредственно подсоединять прямоугольные области.
//Поэтому структура Rectangle предварительно определяется.
//С эллипсом проще. Он подсоединяется "на лету",
//без предварительного опредедления.
Rectangle rect = new Rectangle(0,0,headSize.Width,headSize.Height); gp.AddRectangle(rect); gp.AddEllipse(bw,headSize.Height,this.ClientSize.Width,this.ClientSize.Height);
//Сформировали объект, поддерживающий контуры формы.
//И на его основе создаём объект, который описывает внутреннюю часть
//графической формы.
//В нашем случае она состоит из прямоугольника и эллипса.
Region reg = new Region(gp);
//У любой формы имеется свойство Region.
//У нашей формы - он прекрасен. this.Region = reg;
//Рисуем каёмочку...
gr.DrawEllipse(pen,0,0,this.ClientSize.Width,this.ClientSize.Height);
//Освобождаем занятые ресурсы.
gr.Dispose();
}
200
}
}
Собственные элементы управления
В этом разделе обсуждаются некоторые аспекты проблемы построения собственных элементов управления.
Известно, по крайней мере, три возможных подхода к разработке новых элементов управления:
объединение стандартных элементов управления в группы (составные элементы управления),
объявление новых классов, наследующих от существующих элементов управления,
написание новых элементов “с нуля”.
Разработка составных элементов управления предполагает объявление класса, производного от класса UserControl и использование мастера UserControl, для добавления вложенных элементов управления с последующей настройкой образующих элементов.
Новый элемент управления может быть построен на основе класса-наследника какого-либо из существующих элементов управления. В этом случае в новом классе удаётся частично использовать функциональные возможности ранее объявленного класса, возможно, сохраняя при этом внешний вид элемента. Например, можно объявить собственный вариант класса кнопки, который будет наследовать классу Button.
Написание нового элемента “с нуля” отличается от предыдущего варианта разработки выбором базового класса. В этом случае основываются на классе Control, который не предоставляет потомкам даже элементарного графического интерфейса. Процесс визуализации в этом случае обеспечивается переопределяемым обработчиком события Paint. При этом переопределяется виртуальный метод базового класса OnPaint с единственным аргументом типа PaintEventArgs, который содержит информацию о клиентсой области элемента управления. Член этого класса объект типа Graphics обеспечивает формирование представление элемента управления. Второй член класса - объект типа ClipRectangle описывает доступную клентскую область элемента управления.
Следует отметить, что между двумя последними способами определения элементов управления не существует чётких границ. В обоих случаях основанием для классификации оказывается объём работы по доопределению и переопределению методов и свойств вновь создаваемого класса элементов управления.
В рассматриваемом ниже примере определения собственного элемента управления используется объект-представитель класса ImageList. Объекты этого класса предназначяются для сохранения рисунков, которые могут отображаться другими элементами управления. В общем случае этот компонент позволяет написать код для унифицированного каталога рисунков. В нашем случае он используется для изменения внешнего вида элемента управления. К каждому рисунку можно получить доступ с помощью значения индекса этого рисунка. Отображаемые рисунки имеют один и тот же формат и размер, устанавливаемый в свойстве ImageSize. Таким образом, на основе данного свойства может быть реализован эффект масштабирования элемента управления в смысле изменения его видимых размеров в случае изменения клиентских размеров формы.
using System;
using System.Collections; using System.ComponentModel; using System.Drawing;
using System.Drawing.Drawing2D; using System.Data;
using System.Windows.Forms;
namespace StrangeControls
{
///<summary>
///Summary description for RoundButton.
///Хотя класс RoundButton и объявляется на основе базового
///класса Button, внешнее представление его
///объектов-представителей реализуется в переопределяемом
///методе OnPaint с использованием класса ImageList.
201