Опубликован: 25.03.2010 | Доступ: свободный | Студентов: 1447 / 158 | Оценка: 4.31 / 4.00 | Длительность: 25:42:00
Лекция 18:

Пользовательские компоненты

Это значит, что в своем коде мы можем наследовать класс FirstComponent не от базового класса Component, как это предполагал мастер создания заготовки компонента, а от визуального класса Control. В результате компонент FirstComponent будет иметь визуальное представление на форме как во время проектирования, так и во время выполнения.

  • Заполните файл FirstComponent.cs следующим кодом
using System;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;
using System.Collections;
    
namespace MyCompany.MyComponents
{
    public partial class FirstComponent : Control
    {
        public FirstComponent()
        {
            InitializeComponent();
            Init();
        }
    
        public FirstComponent(IContainer container)
        {
            container.Add(this);
            InitializeComponent();
            Init();
        }
    }
}
    
namespace MyCompany.MyComponents
{
    // Определяем перечисление
    public enum EnumType { Zero, One, Two, Three };
    
    partial class FirstComponent
    {
        // Локальные поля
        int integerProp;
        string stringProp = "По умолчанию";
        char charProp;
        bool boolProp = false;
        EnumType enumProp = EnumType.Zero;
        SomeObject someObject;
	    
        // Общедоступные свойства для локальных полей
        public int IntegerProp
        {
            get { return integerProp; }
            set { integerProp = value; }
        }
    
        public string StringProp
        {
            get { return stringProp; }
            set { stringProp = value; }
        }
    
        public char CharProp
        {
            get { return charProp; }
            set { charProp = value; }
        }
    
        public bool BoolProp
        {
            get { return boolProp; }
            set { boolProp = value; }
        }
    
        public EnumType EnumProp
        {
            get { return enumProp; }
            set { enumProp = value; }
        }
    
        // Сложное свойство - объект	
        public SomeObject SomeObj
        {
            get { return someObject; }
            set { someObject = value; }
        }
    
        void Init()
        {
            someObject = new SomeObject();
            this.BackColor = System.Drawing.Color.Red;
        }
    }
}
    
namespace MyCompany.MyComponents
{
    public class SomeObject : Object
    {
        int prop1;
        string prop2;
    
        // Свойства
        public int Prop1
        {
            get { return prop1; }
            set { prop1 = value; }
        }
    
        public string Prop2
        {
            get { return prop2; }
            set { prop2 = value; }
        }
    
        // Инициализация полей через конструктор
        public SomeObject()
        {
            prop1 = 2008;
            prop2 = "Привет";
        }
    }
}
Листинг 18.2 . Модифицированный код файла FirstComponent.cs

В приведенном начальном коде мы добавили в класс компонента публичные свойства разных типов, включая перечисление и экземпляр стороннего класса. Эти свойства обертывают локальные базовые поля класса. Причем, часть полей мы инициализировали начальными значениями.

Мы поменяли базовый класс Component на Control для того, чтобы сделать компонент визуальным. Базовые поля для свойств класса SomeObject мы инициализировали в конструкторе по умолчанию (для разнообразия). В методе Init() мы создали экземпляр класса SomeObject и инициализировали им внутреннюю ссылку, чтобы при создании самого компонента ссылка бы адресовалась к уже существующему объекту. Мы, также, установили цвет фона компонента для его видимости на вызывающей форме.

Вызов метода Init() поместили внутрь перегруженных версий конструктора класса компонента последним. Конструкторы компонента выполняются оболочкой и на этапе проектирования. Для контролируемого доступа к ссылке на объект извне предусмотрели внутри класса компонента общедоступное свойство. Класс компонента мы разбили на отдельные части, упаковав их в одно и то же пространство имен.

Максим Филатов
Максим Филатов

Прошел курс. Получил код Dreamspark. Ввожу код на сайте, пишет:

Срок действия этого кода проверки уже истек. Проверьте, правильно ли введен код. У вас осталось две попытки. Вы также можете выбрать другой способ проверки или предоставить соответствующие документы, подтверждающие ваш академический статус.

 

Как активировать код?