Создание контрола на основе стандартного – Button с добавлением некоторых свойств.
Введение
Этот пример демонстрирует создание контрола с небольшими расширенными возможностями на основе стандартного контрола Button.
Создание контрола
Запускаем SharpDevelop и выбираем File->New->Solution... Далее выбираем шаблон Windows User Control Library, название проекта - ExtComponent:
Далее находим оператор public partial class ExtButton : UserControl, и в теле этого класса прописываем следующие строки:
//Эти операторы создают закрытые переменные, //них будут храниться значения создаваемых свойств private Color m_color1 = Color.LightGreen; // первый цвет private Color m_color2 = Color.DarkBlue; // второй цвет private int m_color1Transparent = 64; // прозрачность 1-го цвета private int m_color2Transparent = 64; // прозрачность 2-го цвета private int m_Angle = 90; //угол отрисовки
//Создаем настраиваемые свойства которые будут доступны //в приложении public Color Color1 { get { return m_color1; } set { m_color1 = value; Invalidate(); } } public Color Color2 { get { return m_color2; } set { m_color2 = value; Invalidate(); } } public int cuteTransparent1 { get { return m_color1Transparent; } set { m_color1Transparent = value; Invalidate(); } } public int cuteTransparent2 { get { return m_color2Transparent; } set { m_color2Transparent = value; Invalidate(); } } public int Angle { get { return m_Angle; } set { m_Angle = value; Invalidate(); } } |
Теперь нужно отрисовать наш новый компонент:
protected override void OnPaint(PaintEventArgs pe) { // Вызываем базовый класс OnPaint base.OnPaint(pe); // Создаем два полупрозрачных цвета Color c1 = Color.FromArgb (m_color1Transparent , m_color1); Color c2 = Color.FromArgb (m_color2Transparent , m_color2); Brush b = new System.Drawing.Drawing2D.LinearGradientBrush (ClientRectangle, c1, c2, m_Angle); pe.Graphics.FillRectangle (b, ClientRectangle); b.Dispose(); } |
Все готово. Осталось только создать новый проект, добавить наш компонент на панель инструментов и перетащить его на форму. Теперь у кнопки появились новые свойства, как показано на рисунке:
|