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 description for RoundButton.
// Хотя класс RoundButton и объявляется на основе базового
// класса Button, внешнее представление его
// объектов-представителей реализуется в переопределяемом
// методе OnPaint с использованием класса ImageList.
public class RoundButton : Button
{
ImageList imgList;
// Внешнее представление элемента управления меняется
// в зависимости от состояния элемента. Это состояние
// зависит от конкретных событий, происходящих с элементом
// управления.
// Индекс, который используется при изменении внешнего
// представления элемента управления.
// Внешний вид элемента управления определяется значением
// переменной indexB, которая меняет значение в рамках
// переопределяемых обработчиков событий.
// Функциональность данного элемента управления задана
// в классе формы, в виде стандартных (непереопределяемых) обработчиков.
int indexB;
public RoundButton():base()
{
indexB = 0;
imgList = new ImageList();
imgList.Images.Add(Image.FromFile(@"jpg0.jpg"));
imgList.Images.Add(Image.FromFile(@"jpg1.jpg"));
imgList.Images.Add(Image.FromFile(@"jpg2.jpg"));
imgList.Images.Add(Image.FromFile(@"jpg3.jpg"));
this.ImageList=imgList;
}
// Код, управляющий изменением внешнего вида элемента.
// Сюда передается управление в результате выполнения метода
// Refresh().
protected override void OnPaint(PaintEventArgs e)
{
GraphicsPath gp = new GraphicsPath();
gp.AddEllipse(10,10,50,50);
Region reg = new Region(gp);
// Свойству Region присваивается новое значение – новый регион!
this.Region = reg;
e.Graphics.DrawImage(ImageList.Images[indexB],10,10,50,50);
}
protected override void OnClick(EventArgs e)
{
indexB = 0;
this.Refresh();
base.OnClick (e);
}
protected override void OnMouseDown(MouseEventArgs e)
{
indexB = 1;
this.Refresh();
base.OnMouseDown (e);
}
protected override void OnGotFocus(EventArgs e)
{
indexB = 0;
this.Refresh();
base.OnGotFocus (e);
}
protected override void OnLostFocus(EventArgs e)
{
indexB = 0;
this.Refresh();
base.OnLostFocus(e);
}
protected override void OnMouseEnter(EventArgs e)
{
indexB = 2;
this.Refresh();
base.OnMouseEnter (e);
}
protected override void OnMouseLeave(EventArgs e)
{
indexB = 3;
this.Refresh();
base.OnMouseLeave (e);
}
private void InitializeComponent()
{
//
// RoundButton
//
}
}
} |
Листинг 17.5. |
| Закрыть окно |