Создать приложения (Solution) с двумя проектами: один для классов – проект ClassLibrary, наименование PersonLibrary – и второй для пользовательского интерфейса – WindowsApplication, наименование PersonWindows (Рис.1).
Рис. 1
Удалим, создавшийся по умолчанию Class1.
Добавим классы к нашему проекту PersonLibrary. Классы будем добавлен через диаграмму классов.
Диаграмма классов добавляется через контекстное меню (правой кнопки мыши) PersonLibrary и выбором пункта «View Class Diagram» (Рис.2).
Рис. 2
После этого проекте PersonLibrary отобразится соответствующий элемент (Рис.3).
Рис. 3
Переименуем диаграмму классов под терминологию нашего проекта – «PersonClassDiagram» (Рис.4).
Рис. 4
Далее раскроем панель для работы с классами - Toolbox (Рис.5).
Рис. 5
Добавим класс на нашу диаграмму. При добавлении появляется окно для ввода параметров нового класса (Рис.6).
Рис. 6
Вводим параметры класса (Рис.7).
1. Наименование класса – PersonInfo (класс для отображения данных о персоне).
2. Доступ классу устанавливаем открытым (public).
3. Файл для хранения класса.
Рис. 7
После этого класс отображается на диаграмме (Рис. 8).
Рис. 8
При выделении класса (нажатием левой кнопки мыши) внизу на панели «Class Details» отображаются его переменные (или поля - fields), свойства (properties) и методы (methods) (Рис.9).
Рис. 9
В этой панели необходимо будет добавить поля и свойства класса PersonInfo (). Для примера добавим поле «_personFirstName» (имя персоны). Тип переменной устанавливаем «string». Доступ оставляем «private» (Рис.10).
Рис. 10
Введенное поле отобразится на классе (Рис.11).
Рис. 11
Аналогичным образом добавим свойство (раздел «Properties»). Наименование свойства - «PersonFirstName», тип – «string», доступ – «public» (Рис.12).
Рис. 12
Далее добавим остальные поля и свойства класса PersonInfo (Рис.13). Поля для хранения данных: имя персоны (_personFirstName), фамилия персоны (_personSecondName), дата рождения персоны (_personDateBirth), адрес проживания персоны (_personAddress).
Свойства для отображения на форме (и доступа к полям): PersonFirstName, PersonSecondName, PersonDateBirth, PersonAddress, PersonFullName (для отображения полного имени персоны) и PersonAge (для вычисления возраста человека на основе даты рождения).
Рис. 13
После этого диаграмму классов можно закрыть и сохранить и перейти непосредственно к коду класса (Рис.14).
Рис. 14
Созданный автоматически код необходимо модернизировать. Во-первых, необходимо к полям добавить значения по умолчанию. Для полей с типом «string» устанавливаем значение «пустая строка». Для типа «DateTime» устанавливаем значение текущей календарной даты (Рис.15).
Рис. 15
Далее модернизируем код для свойств. Здесь необходимо добавить возвращаемый элемент (в разделе get) и установление значение для полей (в разделе set). Для свойств, созданных для доступа к одноименным полям (их четыре PersonFirstName, PersonSecondName, PersonDateBirth, PersonAddress) устанавливаем соответствующие элементы по примеру на Рис.16.
Рис. 16
Для свойства PersonFullName (полное имя персоны) необходимо составить полное имя на основе полей personFirstName и personSecondName, а также удалить код для изменения (так как имя и фамилия меняются в отдельных свойствах). Пример на Рис. 17.
Рис. 17
Аналогично изменяем код для свойства PersonAge. Возраст рассчитываем как разница между годом текущей даты и годом даты рождения персоны (Рис.18).
Рис. 18
После этого класс сохраняем и закрываем.
Далее переходим к классу, который будет коллекцией (массивом) для классов PersonInfo.
Добавим класс PersonList. Так этот класс должен быть коллекцией, то наследуем его от массива List< PersonInfo > (Рис.19).
Рис. 19
Больше в этом классе ничего делать не будем.
Скомпилируем (Build) проект PersonLibrary. Если нет ошибок, то приступаем к разработке Windows интерфейса.
Добавляем ссылки (reference) к проекту PersonWindows на проект PersonLibrary (Рис.20).
Рис. 20
Переименуем Form1 (правой кнопкой мыши - переименовать) под тематику нашего проекта – PersonForm (Рис.21).
Рис. 21
На форме «PersonForm» добавим элементы listBox и button (Рис.22).
Рис. 22
В кнопке «Загрузить» напишем код для отображения данных о сотрудниках.
1. Добавим ссылку (using) на проект «PersonLibrary» из формы.
2. Создадим объект (экземпляр класса) для PersonList. Объект назовем «_personList».
3. Так как «_personList» это коллекция классов PersonInfo, то переберем ее, выбирая по очереди классы PersonInfo и вставим результат в listBox (Рис.23).
Рис. 23
Если запустить проект, и нажать кнопку «Загрузить», то в нашем списке ничего не отобразится. Это потому, что только что созданный объект «_personList» является пустым.
Для отображения некоторых данных по-умолчанию, заполним объект «_personList» при загрузке формы.
Добавим событие Form_Load. Заполнять будем объект «_personList», который объявлен в событии для кнопки «Загрузить». В связи с этим необходимо объявление этого объекта сделать общим для всех событий формы. Поэтому вынесем объявление в начало формы (Рис.24).
Рис. 24
В событии формы «при загрузке» (form_load) в пустой объект «_personList» добавим два класса PersonInfo. Т.е. _personList является как бы таблицей, которая имеет структуру (название столбцов), но в данный момент пустая, а мы добавляем в нее две заполненные данными строчки. Для этого сначала нужно строчку создать (PersonInfo _per = new PersonInfo), заполнить ее данными и добавить в таблицу.
1. Создаем объект «_per» класса «PersonInfo» и заполняем основные свойства.
2. Добавляем объект «_per» в объект-коллекцию «_personList».
3. Создаем новый экземпляр класса PersonInfo. это нужно, чтобы разорвать связь с предыдущим объектом, который уже добавлен в коллекцию. Если связь не разорвать, то при изменении данных у объекта «_per», будут изменяться данные и в коллекции «_personList». У обновленного объекта «_per» заполняем основные свойства и добавляем его в коллекцию (Рис.25).
Рис. 25
Теперь при загрузке формы в пустую коллекцию «_personList» добавится два класса PersonInfo. И можно при нажатии кнопки «Загрузить» перебрать непустой «_personList» и заполнить listBox (Рис.26).
Рис. 26
Модернизируем наш проект. Добавим кнопку «Добавить», задача которой вносить нового сотрудника. При нажатии этой кнопки должна открываться форма, в которой заполняется данные класса PersonInfo и этот класс возвращается на главную форму и добавляется в коллекцию «_personList».
Добавим в проект PersonWindows новую форму и переименуем ее в «PersonEditForm». Добавим на форму элементы textBox, dateTimePicker и button (Рис.27).
Рис. 27
Для кнопки «ОК» установим свойство «DialogResult = OK». В коде формы объявим экземпляр класса PersonInfo, и сделаем его открытым для других форм (public). В кнопке «ОК» будет заполнение класса данными из textBox и dateTimePicker. В кнопке «Отмена» будет просто закрытие формы. И не забыть про ссылку (using) на проект PersonLibrary (Рис.28).
Рис. 28
Сохраним и закроем форму «PersonEditForm». Вернемся на главную форму «PersonForm» и добавим код в кнопку «Добавить»:
1. Создание экземпляра «newForm» формы «PersonEditForm».
2. Если при запуске формы «PersonEditForm» в диалоговом режиме (нельзя никуда переключаться с формы пока она открыта) будет нажата кнопка с результатом «ОК», то будет реализован сценарий 3.
3.Добавим в коллекцию «_personList» класс из формы «PersonEditForm» (Рис.29).
Рис. 29
Запустим проект и посмотрим результат. После загрузки формы и нажатия кнопки «Загрузить» в списке будет два сотрудника. После добавления сотрудника на форме ничего не отобразится. Но после нажатия кнопки «Загрузить» в список опять добавится два имеющихся сотрудника и только что введенный (Рис.30).
Рис. 30
Для исправления данной ситуации сделаем следующее.
1. Создадим метод «Refresh», где будет храниться код обновления для listBox. Причем сначала будет очищаться listBox, а потом в него будет заноситься все, что находится в классе «_personList».
2. В кнопке загрузить будет вызываться только метод «Refresh».
3. В кнопке «Добавить» после внесения нового сотрудника будет вызываться метод «Refresh» (Рис.31).
Рис. 31
Запустим проект и посмотрим результат. Теперь результат будет таким, который требуется(Рис.32).
Рис. 32
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.