close

Вход

Забыли?

вход по аккаунту

?

Код программы производный элемент

код для вставкиСкачать

Министерство образования и науки Российской Федерации
федеральное государственное бюджетное образовательное учреждение высшего профессионального образования
Ульяновский Государственный Технический Университет
ПРОИЗВОДНЫЙ ЭЛЕМЕНТ УПРАВЛЕНИЯ ADVANCELISTBOX
КОД ПРОГРАММЫ
A.B. 00007-04 КП 01
Листов 8
Содержание
1. Текст программы Advancelistbox на исходном языке3
1.1. Свойства производного элемента управления AdvanceListBox3
1.2. События производного элемента управления3
1.2.1. Определение событий4
1.2.2. Реализация событий4
1.3. Методы класса AdvanceListBox.5
1.3.1. Защищенные методы5
1.3.2. Публичные методы6
1.3.3. Переопределенные методы7
1.4. Конструкторы класса AdvanceListBox.8
1.5. Классы, определяющие аргумент события8
1.ВВЕДЕНИЕ
В данном программном документе приведен исходный код производного элемента управления AdvanceListBox. Текст программы реализован в виде символической записи на исходном языке. Исходным языком данной разработки является Visual C# 2010. Среда разработки, компилятор - Microsoft Visual C# Express 2010 (английская версия).
2. ТЕКСТ ПРОГРАММЫ ADVANCELISTBOX НА ИСХОДНОМ ЯЗЫКЕ
2.1. Свойства производного элемента управления AdvanceListBox
private Color oddColor;
private Color evenColor;
private bool itemsSelectedForbidden;
private bool autoWidth;
private int[] hiddenRecords;
private string hiddenRecordText;
/*свойства*/
[Description("Цвет для нечетных элементов")]
[CategoryAttribute("Appearance")]
[DefaultValueAttribute(typeof(Color), "WindowText")]
public Color OddColor
{
get { return oddColor; }
set
{
oddColor = value;
this.Refresh();
}
}
[Description("Цвет для четных элементов")]
[CategoryAttribute("Appearance")]
[DefaultValueAttribute(typeof(Color), "ActiveCaption")]
public Color EvenColor
{
get { return evenColor; }
set
{
evenColor = value;
this.Refresh();
}
}
[Description("Нельзя выделить ни элемента")]
[CategoryAttribute("Data")]
[DefaultValueAttribute(false)]
public bool ItemsSelectedForbidden
{
get { return itemsSelectedForbidden; }
set { itemsSelectedForbidden = value; }
}
[Description("Устанавливать ли ширину автоматически")]
[CategoryAttribute("Appearance")]
[DefaultValueAttribute(true)]
public bool AutoWidth
{
get { return autoWidth; }
set { autoWidth = value; }
}
[Description("Устанавливать скрытые записи")]
[CategoryAttribute("Data")]
[DefaultValueAttribute(null)]
public int[] HiddenRecords
{
get { return hiddenRecords; }
set { hiddenRecords = value;
this.Refresh();
}
}
[Description("Устанавливает текст скрытой записи")]
[CategoryAttribute("Data")]
[DefaultValueAttribute("Запись скрыта")]
public string HiddenRecordText
{
get { return hiddenRecordText; }
set { hiddenRecordText = value;
this.Refresh();
}
}
2.2. События производного элемента управления
2.2.1. Определение событий
[Description("Событие отрисовки строки в листбоксе")]
[CategoryAttribute("Behavior")]
public event ColorRowsEventHandler ChangeRowColor;
[Description("Событие: выделены все элементы листбокса")]
[CategoryAttribute("Behavior")]
public event EventHandler SelectAllItems;
2.2.2. Реализация событий
/*делегат (событие отрисовки элементов)*/
public delegate void ColorRowsEventHandler(object sender, ColorRowsEventArgs e);
/*представление события*/
protected virtual void OnChangeRowColor(ColorRowsEventArgs e)
{
if (ChangeRowColor != null)
ChangeRowColor(this, e);
}
/*представление события о выделении всех элементов*/
protected virtual void OnSelectAllItems(EventArgs e)
{
if (SelectAllItems != null)
SelectAllItems(this, e);
}
/*выделение всех элементов advancedListbox через событие OnSelectedValueChanged*/
protected override void OnSelectedValueChanged(EventArgs e)
{
base.OnSelectedValueChanged(e);
if (this.Items.Count == this.SelectedItems.Count)
OnSelectAllItems(new EventArgs()); //выброс соотв. события
if (this.ItemsSelectedForbidden == true) //вызов свойства на запрет выделения элементов
this.ClearSelected();
}
2.3. Методы класса AdvanceListBox
2.3.1. Защищенные методы
/*выделение четных/нечетных элементов листбокса цветом*/
protected void Draw(object sender, DrawItemEventArgs e)
{
if (!(this.DesignMode) && e.Index != -1)
{
e.DrawBackground();
Brush myBrush = new SolidBrush(this.ForeColor);
switch (e.Index % 2)
{
case 0:
{
myBrush = new SolidBrush(this.EvenColor);
break;
}
case 1:
{
myBrush = new SolidBrush(this.OddColor);
break;
}
}
//проверка нужно ли скрывать запись
if (hiddenRecords != null)
{
for (int i = 0; i < hiddenRecords.Length; i++)
if (e.Index == hiddenRecords[i])
{
compare = true;
break;
}
}
if (!compare)
e.Graphics.DrawString(this.Items[e.Index].ToString(), e.Font, myBrush, e.Bounds,
StringFormat.GenericDefault);
else
e.Graphics.DrawString(hiddenRecordText, e.Font, myBrush, e.Bounds,
StringFormat.GenericDefault);
compare = false;
e.DrawFocusRectangle();
OnChangeRowColor(new ColorRowsEventArgs(e.Index)); //событие выбрасывается при отрисовке
конкретной строки
if (e.Index == this.Items.Count - 1)
{
this.ItemHeight = this.Font.Height;
if (autoWidth)
{
if ((int)FindMaxLength() >= this.Width)
this.Width = (int)FindMaxLength();
else
this.Width = 164;
}
}
}
}
//для изменения размера
protected float FindMaxLength()
{
using (Graphics canvas = this.CreateGraphics())
{
float maxLength = canvas.MeasureString(this.Items[0].ToString(), this.Font).Width;
for (int i = 0; i < this.Items.Count; i++)
{
if (maxLength < canvas.MeasureString(this.Items[i].ToString(), this.Font).Width)
maxLength = canvas.MeasureString(this.Items[i].ToString(), this.Font).Width;
}
if (hiddenRecords != null)
if (canvas.MeasureString(hiddenRecordText, this.Font).Width > maxLength)
maxLength = canvas.MeasureString(hiddenRecordText, this.Font).Width;
return maxLength + this.Font.Size * 2; //возвращенение с поправкой
}
}
/*защищенный метод попытки преобразования элементов listbox в тип Int32*/
protected Int32[] TryToConvert()
{
Int32[] array = new Int32[this.Items.Count];
try
{
for (int i = 0; i < this.Items.Count; i++)
{
array[i] = Convert.ToInt32(this.Items[i].ToString());
}
}
catch
{
return null;
}
return array;
}
/*просто сортировка, также защищенный метод*/
protected Int32[] Sorting(Int32[] array)
{
if (array != null)
{
int minI;
int min;
for (int i = 0; i < array.Length - 1; i++)
{
min = array[i];
minI = i;
for (int j = i + 1; j < array.Length; j++)
if (array[j] < min)
{
min = array[j];
minI = j;
}
array[minI] = array[i];
array[i] = min;
}
return array;
}
else
return null;
}
2.3.2. Публичные методы
/*новый метод: Нахождение индекса последней строки равной str*/
public int FindLastExactString(string str)
{
int pos = -1;
for (int i = 0; i < this.Items.Count; i++)
if (this.Items[i].ToString() == str)
{
pos = i;
}
if (pos == -1)
return -1;
else
return pos;
}
/*новый метод для выделения/снятия выделения элементов AdvancedListBox в каком-то диапазоне,
возвращает true если выделение прошло успешно, иначе false*/
public bool SelectedAllItemsInRange(int startPos, int lastPos, bool value)
{
if (startPos <= this.Items.Count && lastPos <= this.Items.Count)
{
for (int i = startPos; i <= lastPos; i++)
this.SetSelected(i, value);
return true;
}
else
return false;
}
/*поиск самой длинной записи*/
public object FindTheLongestRecord()
{
object maxLengthRecord = this.Items[0];
foreach (object record in this.Items)
{
if ((record.ToString()).Length > (maxLengthRecord.ToString()).Length)
{
maxLengthRecord = record;
}
}
return maxLengthRecord;
}
/*Сортировка по возрастанию элементов, при этом используется защищенный метод TryToConvert() и
Sorting()*/
public void TryToSort()
{
Int32[] array = TryToConvert();
array = Sorting(array);
if (array != null)
{
this.BeginUpdate();
for (int i = 0; i < array.Length; i++)
{
this.Items[i] = array[i];
}
this.EndUpdate();
}
}
2.3.3. Переопределенные методы
/*переопределенный метод для сортировки по длине строк для свойства lengthSorted*/
protected override void Sort()
{
int minI;
object min;
for (int i = 0; i < this.Items.Count - 1; i++)
{
min = this.Items[i];
minI = i;
for (int j = i + 1; j < this.Items.Count; j++)
if ((this.Items[j].ToString()).Length < (min.ToString()).Length)
{
min = this.Items[j];
minI = j;
}
this.Items[minI] = this.Items[i];
this.Items[i] = min;
}
}
2.4. Конструкторы класса AdvanceListBox
public AdvanceListBox()
: base()
{
/*прописываем стандартные значения цветам строк*/
this.DrawMode = DrawMode.OwnerDrawFixed;
this.DrawItem += new DrawItemEventHandler(Draw);
this.OddColor = Color.FromName("WindowsText");
this.EvenColor = Color.FromName("ActiveCaption");
this.AutoWidth = true;
this.HiddenRecords = null;
this.HiddenRecordText = "Запись скрыта";
}
2.5. Классы, определяющие аргумент события
/*классы для определения события*/
public class ColorRowsEventArgs : EventArgs
{
public int Index;
public ColorRowsEventArgs(int index)
{
Index = index;
}
}
8
А.В. 00007-04 КП 01
2012
Документ
Категория
Разное
Просмотров
23
Размер файла
39 Кб
Теги
элементы, программа, код, производной
1/--страниц
Пожаловаться на содержимое документа