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

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

Упражнение 2. Создание невизуального компонента Planets

В этом примере мы создадим невизуальный компонент Planets, инкапсулирующий в себе названия планет Солнечной системы, и добавим его в нашу библиотеку компонентов сборки MyComponents. Названия планет будут храниться во внутреннем массиве компонента, а доступ к ним будет осуществляться через индексаторы по имени планеты или ее индексу.

  • В панели Solution Explorer выделите проект MyComponents и выполните команду меню Project/Add Component, чтобы добавить файл Planets.cs нового компонента
  • Дополните содержимое файла, автоматически сгенерированное мастером, следующим кодом
using System;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;
using System.Collections;
    
namespace MyCompany.MyComponents
{
    public partial class Planets : Component
    {
        public Planets()
        {
            InitializeComponent();
        }
    
        public Planets(IContainer container)
        {
            container.Add(this);
    
            InitializeComponent();
        }
    }
}
    
namespace MyCompany.MyComponents
{
    partial class Planets
    {
        // Планеты
        private string[] PlanetNames ={ "Меркурий",
                                        "Венера",
                                        "Земля",
                                        "Марс",
                                        "Юпитер",
                                        "Сатурн",
                                        "Уран",
                                        "Нептун",
                                        "Плутон"
        };
    
        // Вернуть имя
        private string GetPlanetName(int index)
        {
            // Нижняя и верхняя границы массива
            int lowP = 0, highP = PlanetNames.Length - 1;
    
            // Контролирует диапазон индекса планеты и возвращает
            // ее название или генерирует исключение
            if (index < lowP || index > highP)
            {
            MessageBox.Show(String.Format("Индекс 
		должен находиться в диапазоне {0}-{1}",
               lowP, highP));
            index = 0;
            }
    
            return PlanetNames[index];
        }
    
        // Вернуть индекс
        private int GetPlanetPosition(string planetName)
        {
            // Сравниваем переданное имя планеты с массивом
            // PlanetNames. При несовпадении возвращаем -1 
            int result=-1;
            for(int i=0; i<PlanetNames.Length;i++)
                if (String.Compare(planetName, PlanetNames[i], true) == 0)
                {
                    result = i;
                    break;
                }
    
            return result;
        }
    
        // Свойство - индексатор: возвращает имя планеты по индексу
        public string this[int index]
        {
            get {return GetPlanetName(index); }
        }
    
        // Свойство - индексатор: возвращает индекс планеты по имени
        public int this[string planetName]
        {
            get { return GetPlanetPosition(planetName); }
        }
    
        // Свойство максимального размера массива
        public int MaxIndex
        {
            get { return PlanetNames.Length - 1; }
        }
    }
}
Листинг 18.8 . Расширенное содержимое файла Planets.cs

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

Теперь осталось перекомпилировать сборку MyComponents.dll, в которой в одном пространстве имен MyCompany.MyComponents будут находиться уже два наших компонента, и испытать новый невизуальный компонент.

  • В панели Solution Explorer вызовите контекстное меню для узла проекта MyComponets и выполните команду Rebuild, чтобы перекомпилировать проект с компонентами
  • Убедитесь, что в панели Toolbox появился новый компонент Planets, который теперь можно перетаскивать на форму также, как и обычный библиотечный компонент
Максим Филатов
Максим Филатов

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

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

 

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