Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Создание собственного элемента пользовательского интерфейса




Тестирование элемента управления

1. В окне Solution Explorer щелкните правой кнопкой форму Form1 и выберите из контекстного меню команду View Designer — эта форма откроется в окне дизайнера.

2. Перетащите элемент управления PrettyClock с панели Toolbox на форму — к форме добавится новый экземпляр этого элемента управления.

3. Установите для свойств нового экземпляра PrettyClock, перечисленных в таблице 7-8, необходимые значения.

Таблица 7-8. Свойства элемента управления PrettyClock

Свойство Значение
ForeColor Red
ForeColorTwo Yellow
Font.Size  
Size 225, 50

Обратите внимание, что при модификации значений свойств изменения вступают в силу немедленно и результаты сразу же отображаются на форме.

4. Убедитесь, что форма обновляется ежесекундно, изменяя вид цветового перехода. Для этого нажмите F5, чтобы запустить приложение. Заметьте, что в период выполнения поведение элемента управления не изменилось.

Иногда встроенные элементы управления Windows Forms не обеспечивают необходимую вам функциональность. Вы можете создать собственный элемент управления, который будет представлять комбинацию существующих элементов или оригинальный рисунок или тему. В разделе 1.2.2 был описан простой составной элемент управления. С учетом опыта его построения построим еще одну составную компоненту, которая представляет собой комбинацию ползунка, числового поля, метки и рисунка, позволяющего выбирать цвет.

Вот его примерный исходный текст:

using System;

using System.Collections.Generics;

using System.ComponentModel;

using System.Drawing;

using Systern.Windows.Forms;

namespace CustomControl

{

public enum RGBSelection

{

R,G,B

};

public partial class MyCustomControl: UserControl

{

// Элементы управления

public event EventHandler<EventArgs> ValueChanged;

private System.ComponentModel.IContainer components = null;

private System.Windows.Forms.Label labelLabel;

private System.Windows.Forms.NumericUpDown numericUpDownValue;

private Systern.Windows.Forms.TrackBar trackBarValue;

public MyCustomControl()

{

InitializeComponent();

numericUpDownValue.Minimum = 0;

numericUpDown Value. Maximum = 255;

trackBarValue.Minimum = 0;

trackBarValue.Maximum = 255;

trackBarValue.TickFrequency = 10;

numericUpDownValue.ValueChanged += numericUpDownValue_ValueChanged;

trackBarValue.ValueChanged += trackBarValue_ValueChanged;

}

protected override void Dispose(bool disposing)

{

if (disposing && (components!= null)) { components.Dispose(); }

base.Dispose(disposing);

}

private void InitializeComponent()

{

this.labelLabel = new System.Windows.Forms.Label();

this.numericUpDownValue = new Systern.Windows.Forms.NumericUpDown();

this.trackBar Value = new System.Windows.Forms.TrackBar();

((System.ComponentModel.ISupportInitialize)(this.numericUpDownValue)).BeginInit();

((System.ComponentModel.ISupportInitialize)(this.trackBarValue)).BeginInit();

this.SuspendLayout();

// labelLabel

this.labelLabel.AutoSize = true;

this.labelLabel.Location = new System.Drawing.Point(4, 4);

this.labelLabel.Name = "labelLabel";

this.labelLabel.Size = new System.Drawing.Size(71, 13);

this.labelLabel.Tablndex = 0;

this.labelLabel.Text = "Dummy Label";

// numericUpDownValue

this.numericUpDownValue.Location = new System.Drawing.Point(175, 20);

this.numericUpDownValue.Name = "numericUpDown Value";

this.numericUpDownValue.Size = new System.Drawing.Size(41, 20);

this.numericUpDownValue.Tablndex = 1;

// trackBarValue

this.trackBarValue.Location = new System.Drawing.Point(7, 2 0);

this.trackBarValue.Name = "trackBarValue";

this.trackBarValue.Size = new System.Drawing.Size(162, 45);

this.trackBarValue.Tablndex = 2;

// MyCustomControl

this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);

this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;

this.Controls.Add(this.trackBarValue);

this.Controls.Add(this.numericUpDownValue);

this.Controls.Add(this.labelLabel);

this.Name = "MyCustomControl";

this.Size = new System.Drawing.Size(216, 65);

((System.ComponentModel.ISupportlnitialize)(this.numericUpDownValue)).EndInit();

((System.СomponentModel.ISupportlnitialize)(this.trackBarValue)).Endlnit();

this.ResumeLayout(false);

this.PerformLayout();

}

public RGBSelection ColorPart { get; set; }

public string Label

{

get { return labelLabel.Text; }

set { labelLabel.Text = value; }

}

// Значение элемента управления

public int Value

{

get { return (int)numericUpDownValue.Value; }

set { numericUpDownValue.Value = (int)value; }

}

// Если либо у ползунка, либо у числового поля изменилось значение, мы должны

// обновить другой элемент, чтобы сохранить их взаимное соответствие

void trackBarValue_ValueChanged(object sender, EventArgs e)

{

if (sender!= this)

{

numericUpDownValue.Value = trackBarValue.Value;

OnValueChanged();

}

}

void numericUpDownValue_ValueChanged(object sender, EventArgs e)

{

if (sender!= this)

{

trackBarValue.Value = (int)numericUpDownValue.Value;

OnValueChanged();

}

}

protected void OnValueChanged()

{

Refresh();

if (ValueChanged!= null) { ValueChanged(this, EventArgs.Empty); }

}

protected override void OnPaint(PaintEventArgs e)

{

base.OnPaint(e);

// Эллипс нужного цвета — единственное, что мы должны

// нарисовать сами в этом элементе управления

Rectangle rect = new Rectangle(numericUpDownValue.Left, 5,

numericUpDownValue.Width, numericUpDownValue.Bounds.Top-10);

int r=0, g=0, b=0;

switch (ColorPart)

{

case RGBSelection.R: r = Value; break;

case RGBSelection.G: g = Value; break;

case RGBSelection.B: b = Value; break;

}

Color с = Color.FromArgb(r,g,b);

using (Brush brush = new SolidBrush(c)) { е.Graphics.FillEllipse(brush, rect); }

}

}

}

После создания компоненты установите ее на палитру компонент, создайте новое приложение и испытайте созданную вами компоненту на главной форме нового приложения.




Поделиться с друзьями:


Дата добавления: 2015-07-02; Просмотров: 278; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.042 сек.