Исследование MS Visual С#, страница 17

sl.Add ("DictionaryBase", "Needed to сreate custom collections");

  //=== Текущее значение допустимого количества элементов

Console.WriteLine (" List Capacity: {0}\n\n",sl.Capacity);

  //=== Демонстрируем выбор по ключу

Console.WriteLine(" sl[\"BitArray\"] = {0}\n\n", sl["BitArray"]);

for (int i = 0;  i < sl.Count;  i++)  // Выбор по индексу

Console.WriteLine (" {0}: {1}",

       sl.GetKey(i).ToString().PadRight(15), sl.GetByIndex(i));

}

Вывод подтверждает факт упорядоченности коллекции по ключевому полю. Если в качестве ключевого поля выступает сложный объект, то, как вы, наверное, догадались, правила игры задает интерфейс IComparable и его метод CompareTo. Сортировка идет с учетом возвращаемого этим методом результата сравнения двух объектов. С другими типами динамических коллекций объектов: BitArray, Queue и Stack вы познакомитесь с помощью MSDN. Они очень просты в обращении.

Задание. Создайте сортированный список SortedList объектов класса Man. Для изменения порядка сортировки используйте логику метода CompareTo и статического свойства Man.SortBy.


Windows-приложение на платформе .NET

В новом проекте мы собираемся управлять списком данных о людях: сотрудниках отдела (кафедры и т.д.). В процессе работы со списком пользователь может: вводить данные в список, редактировать их, сохранять в файле, читать из файла, осуществлять поиск по имени и изменять данные. Начнем с создания проекта.

1.  В меню File4New выберите команду Project, в диалоге New Project, (окно Project Types) раскройте узел под именем Visual C# Projects, а в окне Templates выберите тип проекта Windows Application.

2.  В поле Name задайте имя проекта People, а в поле Location удобный для вас файловый путь. Папка с именем проекта будет создана по указанному адресу и нажмите OK.

Начальную заготовку приложения вы можете увидеть в файле Form1.cs. По умолчанию содержимое этого файла демонстрируется в режиме дизайна формы. Дизайнер формы — это специальный инструмент студии, который позволяет вставлять элементы управления, размещать их на форме, а также добавлять видимые и невидимые компоненты. Последние появляются в нижней части окна дизайнера (tray). Сами элементы и компоненты вы будете выбирать на поверхности окна Toolbox. Исследуйте различные вкладки этого окна.

Дизайнер позволяет изменять свойства элементов и генерировать начальные заготовки для функций обработки событий. Работая в режиме дизайна, будьте внимательны, когда производите двойной щелчок мыши. Это действие автоматически создает обработчик события по умолчанию (оно различно для разных элементов) и вставляет начальный код функции обработки в класс формы Form1.

Для перехода в другой режим работы с формой — режим редактора кодов, выберите команду View Code, которая имеется в контекстном меню самой оконной формы, а также контекстном меню, появляющемся над строкой Form1.cs окна Solution Explorer. Если вы выберете команду View Code, то появится окно редактора кодов, в котором будет начальная заготовка класса Form1. Просмотрите ее.

Главный вывод, который следует сделать из анализа кода начальной заготовки, можно сформулировать так. Оконная форма — это динамическая коллекция компонентов и элементов управления, которые добавляются в режиме дизайна. Детали их описания прячутся в блоке кодов, расположенном между директивами #region-#endregion. Эти детали не следует редактировать вручную в окне редактора кодов. Лучше делать это с помощью механизма свойств, доступного в режиме дизайна. При этом надо пользоваться  возможностями окна Properties. Другие выводы:

¨  Оконная форма является контейнером компонентов и обычных элементов  управления (controls).

¨  Класс Form1 содержит переменную components и стандартный набор методов. Методы класса Container управляют поведением компонетов.

¨  Список используемых пространств имен (директив using) оптимизирован и в него не следует включать те пространства, которые не используются приложением.

Развитие оконной формы

Измените список используемых пространств имен (директив using) на:

using System;

using System.Drawing;

using System.Collections;

using System.ComponentModel;

using System.Windows.Forms;

using System.Text;

using System.IO;

using Microsoft.Win32;

Добавьте в класс Form1 несколько переменных, которые понадобятся для управления списком данных. Например, переменная bModified выполняет роль флага, следящего за необходимостью записать данные в файл. Она возникает каждый раз, когда пользователь вносит изменения в данные, и исчезает, когда он сохраняет данные или читает их из файла.

private bool bModified; // Флаг необходимости сохранить данные

private string sUndo; // Строка отката (отказ от одного последнего изменения)

private string version; // Строка проверки файла (наш ли это файл?)

private string fileName;  // Полный путь к файлу документа

В переменной sUndo будем хранить последнюю, удаленную пользователем строку списка, что позволит восстановить ее при необходимости. Это лучше, чем потеря записи и значительно проще, чем организация списка Undo List. В начале работы наш список чист, то есть еще не изменен и не требует сохранения. Учитывая это, в конструктор Form1() следует вставить следующие инициализирующие операторы.

public Form1()

{

InitializeComponent();

bModified = false;     // Документ сначала чист

  //==== Произвольный текст, идентифицирующий наши файлы

version = "YourSoft, People, version 1.0";

}

Используйте редактор формы (для этого надо перейти в режим Design) и придайте ей вид, который показан на рис. Новые элементы следует выбирать на панели инструментов Toolbox и поочередно размещать их на форме. Для изменения размеров и местоположения элементов лучше пользоваться клавиатурой. С ее помощью удобно позиционировать и выравнивать элементы. Размеры элементов можно корректировать с помощью клавиш управления курсором (стрелок) в комбинации с клавишей Shift.