Главная » C#, Компоненты » Изображение значений

0

используется в стандартных компонентах довольно часто. Для свойства imageindex отображается картинка, для цвета— цветной квадратик и т.д. Для свойства position компонента MinMaxControi можно отображать само значение, так же как это делает сам компонент.

Включить вывод изображения можно, перекрыв метод GetPaintValueSupportedf):

public override bool GetPaintValueSupportedf

ITypeDescriptorContext context}

}

// Редактируемый компонент

MinMaxControi control = (MinMaxControi}context.Instance; // Если есть возможность показать значение return control.Min != control.Max;

}

Сама отрисовка производится в методе Paintvaiue(}, код которого полностью идентичен коду рисования самого компонента. Единственный параметр этого метода е передает всю необходимую для рисования информацию. Границу заливки можно получить с помощью свойства е.Bounds, ссылку на сам компонент возвращает свойство е.Context.instance. Полный код показан в листинге 9.6, а получившийся результат — на рис. 9.10.

Листинг 9 6 Изображение значении свойства Position С ПОМОЩЬЮ МОТОДЭ PaintValue

using System;

using System.Collections.Generic;

using System.Text;

using System.Drawing.Design;

using System.ComponentModel;

using System.Windows.Forms.Design;

using System.Drawing;

namespace MyControl I

class PositionUIEditor : UITypeEditor

{

// Рисовать изображение значений public override bool GetPaintValueSupported( ITypeDescriptorContext context)

{

// Редактируемый компонент

MinMaxControl control = (MinMaxControl)context.Instance; // Если есть возможность показать значение return control.Min != control.Max;

}

public override void PaintValue{PaintValueEventArgs e) {

base.PaintValue(e); // Редактируемый компонент

MinMaxControl control = {MinMaxControl) e.Context.Instance;

// Значение свойства

int value = {int)e.Value;

if (control.Max != control.Min) {

SolidBrush fillBrush = new SolidBrush(Color.Blue); SolidBrush backBrush = new SolidBrush{Color.White);

// Рисуем прямоугольник Rectangle nonFillPart = e.Bounds; float percentValue – {(float)value /

({float}control.Max — {float}control.Min));

int nonDimLength =

(int)(percentValue * (float)nonFillPart.Width); nonFillPart.X += nonDimLength; nonFillPart.Width — nonDimLength; // Заливаем весь компонент

e.Graphics.FillRectangle(fillBrush, e.Bounds); // Восстанавливаем цвет в незаполненной части е.Graphics.FillRectangle(backBrush, nonFillPart);

fillBrush.Dispose(); backBrush.Dispose() ;

}

}

}

}

Рис. 9.10. Изображение значения свойства Position

Литература:

Агуров П. В. C#. Разработка компонентов в MS Visual Studio 2005/2008. – СПб.: БХВ-Петербург, 2008. — 480 е.: ил.

По теме:

  • Комментарии