Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

OOП

.pdf
Скачиваний:
7
Добавлен:
23.02.2015
Размер:
623.16 Кб
Скачать

Таблица 1 Специ икации орматов

 

 

âð ìÿ

 

 

 

символ

äàòà

символ

 

 

 

 

описание

описани

 

 

 

ddd, %d

нулямесяцацабезс лидирую•лидирую•

hhh, %h

 

 

 

h

 

 

щимденьщегодень нулеммес

 

часыдирующегочасы вв орматеорматенуля12

 

áåç ëè•

ddd

ройденьднямесяцанеделисаббревиату•

H, %H

часыдирующимворматенулем12h ñ ëè•

dddd

деньвниеммесяцадня недеспоëíûìè íà•

HH

часыдирующеговорматенуля24h

áåç ëè•

 

çначениебезмесяцамесяцалидирующеговввидевиде

mmm, %m

 

 

 

 

h

MMM, %M

значениенулячисла

 

минутынуляминутыдирующимсбезлидирующимнулемлидирующего24 ñ ëè•íó•

 

числа с лидирующим ну•

 

ëåì

 

 

 

 

MMM

ëåì

s, %s

секунды без лидирующего

окращенное название ме•

MMMM

ñÿöà

ss

íóëÿ

 

 

 

 

полное название месяца

секунды с лидирующим

y,%y

значение года без обозна•

t, %t

нулем

ормате

äëÿ

времени

yy

щимчениязначениенулячения векаулемвека,годаинолидирующегобезслидирую•обозна•

tt

h

временинияпервогосимволаAM/PMсимволармате

 

 

 

12дляобозначвывод

 

 

 

/yyyy

ниюразделительниемзначениедлявекаполейгодапосдатыобозначе•умолча•

:

h

 

 

 

îбозна•

 

 

 

12ниюразделительчениявыводдляAM/PMполейповремениумолча•

20

 

3.4 Списки ComboBox

 

Элемент управления ComboBox (выпадающий список объединение строки ввода

и списка) содержит текстовые строки, которые могут быть выбраны пользователем. Эле•

менты списка представляются экземплярами класса ListItem, содержащими свойства:

Text текст элемента

ïèñ ;

Va ue произвольная

строка, связанная с пунктом списка;

Sele ted выбран ли данный элемент (значение true) или нет (значение false);

Count количест

элементов в списке;

Sele tedIndex

возвращает целочисленное значение, соответствующее индексу вы•

бранного элемента ( если список выбора пустой, то возвращает -1);

Sele tedItem возвращает текстовую строку, соответствующую выбранному эле•

менту.

 

 

 

Ïðè â

боре элемента списка изменяется значение свойства Sele tedIndex, при этом

жет быть вызвано событие Sele tedIndexChanged, кото ое позволяет определить после

до ательность действий при выборе пункта списка. Напðимер, пусть на калькулятор мо•до

бавлен

 

ComboBox с именем fun tions (т.е. войство Name добавленного элемента

ComboBoxэлементимее значение fun tions). Добавим в спиñок два пункта: sin и os. При выборе

пункта в сп ске в окно редактора result1 долж о выво иться значение тригон метриче•

inte:. ункцииСоздадимSystem::Voidматематическуюот(выбранного>SeleзаголовокfunилиtedIndex;tio s Sele)пунктаоперацию:отtedIndexChanged(System::Objeункциизначениясспискедляаргумеобработки(т.е.вíзависимостита,t^событиявведенногоsender, System::EventArgs^отSeleзначениявпервоеtedIndexChangedSeleтекстовоеe) tedIndexполеи,в),

{определимзависимостиfirstскойpriva

SIN

COS

 

 

a=fun tions-

 

 

->Text);

double ;

 

 

 

 

swit h b=System::Convert::ToDouble(firsta )

 

{

ase

0:

 

 

 

=System::Math::Sin(b);

 

 

break;

 

 

 

 

ase 1:

 

 

21

 

=System::Math::Cos(b);

 

re}

ult1break;->App

->Sele dIt m+"("+first->Text+") = "+System::Convert::ToString( )+"

\t"+

}

System::Convert::ToString(SyndText(fun tionstem::DateTime::Now)+"\n");

 

 

 

 

 

3.5 Зависимые кнопки RadioButton

 

 

 

 

 

 

Элементы RadioButton создают список взаимоисключающих элементов. Щелчок

по кнопке включает ее, одновременно отключая все остальные. Элемент RadioButton яв•

ляется производным от Che kBox.

 

 

 

 

 

 

Чтобы организовать вз имодействие кнопок следует сначала размест ть на орме

ëèáî Panel, ëèáî GroupBox. Çàтем, разместить кнопки RadioButton на

ýòèõ

элементах

управления.

 

 

 

 

 

 

 

 

Вообще GroupBox комп ненты используют, чтобы обеспечить разделение

не тов на р з ичные группы,

которые становятся для них родителями с тем, чтобыкомпо•

 

ненты унаследовали

свойства своих

 

. Обычно так делают, чтобы

ïîдразделить орму на неск лько ункций. Да

родителейдизайн осуществлять удобнее: пере•

мещая только GroupBoxнекоторые, мы дновременно перемещаем все компоненты, которые в нем

находятся.

 

 

 

 

 

 

 

 

Необходимые свойства элемента RadioButton:

 

 

 

 

1) Text хранит метку элемента RadioButton;

 

 

 

 

 

2)

Che ked указывает, выбран ли данный элемент (значение true) или нет (значение

 

 

false).

 

 

 

 

 

 

 

 

ассмотрим пример: пусть на калькуля оре размещен элемент RadioButton, при•

Если же элемент не выбран,калькуляторена калькулятореприсутствуютне ак ивен элемент ComboBox.

 

чем, если он выбран, то на

 

все ранее добавленные элементы.

Name

азм стите на

RadioButton, измените з ачение свойства

значение advanкалькулятореed, значениеэлементсвойс ва Che ked установите равíûì false.

íèòå

значение

свойства Text на значение асширенный. В этом случае при запуске прилоИзме•

жения кнопка Radiobutton

будет выбрана. В этом случае по условию задачи элемент

ComboBox должен быть неактивным. Это можно реализовать одним из следующих спосо•

áîâ:

 

 

 

 

òà ComboBox

ачение false

 

установите значение свойства Enabled вашего элем

 

 

(после запуска приложения элемент будет недоступеí для использования);

 

 

 

 

22

 

 

 

 

 

 

(послеустановитезапусказначениеприложениясвойства Visibleíå вашегобудет виденментаíà îðìå)ComboBox.

в значение false

Для того, чтобы после выбора элементаRadioButton элемент ComoBox стал активным (или

видимым) необходимо написать обработчик собы ия Che kedChanged элемента RadioButton,

которое вызывается

раз, когда

зменяется значение свойства Che ked элеме та

RadioButton. Перейдитевсякийсписку

событий элемента RadioButton

найдите там назваíèå

нужного события, сгенерируйте заголовок соответствующей

ункции в коде программы.

Тело ункции будет следующим:

(System::Obje t^ sender, System::EventArgs^ e)

 

 

private: Syst m::Void advan ed Che kedCh ng

 

 

}

if(advan ed->Che ked) {fun tions->Enabled=true;};

 

 

 

 

 

{

 

Здесь, если значение свойства Che ked элемента RadioButton

именем advan ed

 

ринимает значение true, то элемент ComboBox с именем fun tions

становится активным,

ïоскольку его свойство Enabled принимает значение true.

 

 

 

 

 

 

4 Управление ормами

 

 

 

 

 

 

 

 

В лекцио ном курсе подробно рассматривается процесс управления ормой Form1,

дается список осíовных свойств ормы, которые позволяют изменять ее внешний вид и

ïîâ

ние, а также список основных событий, определяющих реакцию

íà

определенные действия пользователя. На

занятиях студенты вып лняют

задания, позволяющие

науч ться объединя ь одном приложении несколькоприложениярм, ко•

торые при определенных услов ях взаимодейспрактическихвуют друг с другом. Материал лекций для

 

 

зад ний необходим,

 

 

приходится оперировать со

 

 

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

курсе подробно рассматриваетсяпосколькуалг ритм

задания, которое студенты затем выполняют

на практических

.

 

 

 

 

 

 

 

 

 

Ниже ещезанятияхр приводится алгоритм задания и подробно рассматриваются все тон•

кости выполнения задания.

 

 

 

 

 

 

 

 

 

4.1 С здание нескольких элементов Form и их связь

 

 

 

 

 

Äëÿ òîго, чтобы добавить

приложение несколько

овых орм, воспользуйтесь

пунктом меню Проект и выберите До ить но ый эл м нт. В

 

 

диалого•

вом окне выберите Форм Windows Forms. Введите имя ормы. Послепоявившемсяэтого

текущий

 

 

 

 

 

 

23

 

 

 

 

проект будет добавлена новая орма, которая

жет содержать различные элементы

 

 

 

асс отримñконкретнуюуже имеющейсязадачу:проектеразработатьормойприложение,.

состоящее из трех орм.

взаимодействоватьПе вая должна содержать заставку

приложению Калькулятор ,

 

также ин•

ормациюор разрабо

чике. Форма должна закрываться через 5 секунд или

раньше, если

ароля. Если пользователь

вводит верные значения, то открываетсяклавишулькулятор, иначе

пользователь кликае

на орме мышкой или нажимает любую

íà

 

.

Вторая орма должна содержать два поля: для ввода имени пользов теля

клавиатуредля ввода

ïриложение закрывается.

 

 

 

 

 

 

 

 

 

вып лнение задания начинается с добавления двух н вых орм в проект кальку•

лятора. Назовите первую орму logo, а вторую password. После

этого сохраните проект

и запустите отладку. Запуст в прило ение, вы обнаружите, что новые ормы не появ•

ляются на экране, приложенè

ïî ïðåæнему запускается как калькулятор. Это связано

 

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

проекта и расширением

тем, что первая орма, соз

анная в проекте считается главной и запуск ется всегда п р•

. pp. Íàéäите этот айл и изучите его содержимое: вы увидите, что этот айл содержит

ункцию main, где вызыв ется орма Form1 как аргумент ункции Appli ation::Run.

этому именно эта

îðìà

будет загружат ся первой. Чтобы при запуске пр ложения

ïîявлялись две другие ормы, пользователü должен инициировать их запуск из ормы

Form1

.

Чтобы определить порядок появления орм, откройте список с бытий для ормы

 

найдите там событие Load, сгенерируйте стандартный заголîвок ункции для

обработки этого события:

 

 

 

 

 

 

 

private: System::Void Form1_Load(System::Obje t^ sender, System::EventArgs^ e)

 

{

 

 

 

 

 

 

 

 

 

 

}

 

 

 

 

первым выводом ормы на экран при запуске приложе•

Это событие выполняется пе

ния. Именно здесь можно определить порядок появления двух дополнительных орм.

 

 

 

Важным является вопрос: каким образом пользователь будет вызывать дополни•

тельные ормы. Как известно, для любой ормы доступны два метода:

 

 

 

 

 

;

 

 

24

 

 

 

 

 

ShowDialog().

 

 

 

 

 

 

 

Первый метод метод Show() выводит на экран ту орму, для которой он вызван. При

этом, если на экране есть активные ормы, они также останутся видимыми, пользователь

будет иметь

озможность обратиться к ним. Второй метод метод ShowDialog()

òêðû•

âàåò ðìó

в модальном режиме. Этот метод

 

 

тогда,

огда орма должна

ждать

отклика пользователя на св

появление.используетсяДо х пор, пока отклик не получен (или

не закрыта текущая орма), пользователь не может перейти

другим ормам. Поск

ó

в задании ормы появляются последовательно

калькулятор должен запускаться

только

при определенном условии, необходимо использовать метод ShowDialog().

 

 

 

 

4.2 азработка ормы

логотипом

 

 

 

 

 

 

îðìà

Д я того, чтобы при запуске приложения на экране в первую очередь появлялась

оготипом (logo) добавим в обработчик события Load главной ормы Form1

следующие строки:

 

 

 

 

 

 

 

 

^ logoform = g new logo();

 

 

 

 

 

 

 

logoform->ShowDialog();

 

 

 

 

 

 

 

В первой строке создается экземпляр класса logo с именем logoform. В следующей строке

для этого экземпляра класса вызывается метод ShowDialog(). Таким образом, обработчик

события Load теперь выглядит следующим образом:

 

 

 

 

 

private: System::Void Form1 Load(System::Obje t^ sender, System::EventArgs^ e)

 

 

{

 

^ logoform = g new logo();

 

 

 

 

 

 

}

logoform->ShowDialog();

 

 

имо в айл Form1.h включить

Для того, чтобы компиляция прошла успешно, необх

заголовочный айл logo.h, поскольку в этом айле содержится объявление и описание

класса logo. Добавьте в начало айла Form1.h строку

 

 

 

 

 

#in lude "logo.h"

 

 

 

 

 

 

 

Запустите компиляцию само приложение. Теперь, если все сделано правильно, в первую

очередь на экране появится орма logo. Форма-калькулятор появится только после того,

как польз ватель закроет орму logo.

 

 

 

приложению Каль•

 

 

По условию задачи

logo должна содерж ть заставку

 

лятор ,

также ин ормациюорма

разработчике. Форма должна закрываться через 5

ñå•

êóнд или раньше, если пользователь кликает на орме мышкой или нажимает любую 25

клавишу на клавиатуре. Все эти параметры определяются свойствами событиями ор•

ìû logo.

 

 

 

 

 

 

1)

Свойство Ba kgroundImage хранит путь к айлу с оновой картинкой, помещенной

2)

íà îðìå.

 

 

 

его свойство Text можно использовать

Элемент Label, помещенный на орму logo,

3)

для добавления на орму ин ормации о разработчике приложения.

Свойство ормы StartPosition со значением S reenCenter позволяет разместить

4)

орму по центру экрана при ее запуске.

 

 

 

Свойство KeyPreview

чением true, чтобы орма реагировала на нажатие кла•

5)

виш на клавиатуре послезнàпуска.

 

 

 

Свойство FormBorderStyle со значением None уберет рамку вокруг ормы, в том

6)

числе панель с кнопками

верху.

 

 

 

Свойство ShowInTaskBar

ñî

значением false приведет к тому, что орма не будут

 

отображаться в панели задач (и пользователь никак не сможет орму закрыть, пока

 

не созданы обработчики событий для ее закрытия. Злобный смех за кадром...)

Все эти свойства определяют визуальное представление

но никак не определяют

ее поведение. Для того, чтобы определить

ормы,необходимо использовать

элемент Timer, а также создать обработчик с бытия KeyDown. Таймер необходим, чтобы

задать интервал

по истечении которповедениего орма закроется автоматически. Собы•

тие KeyDown возникаетвремени,том случае, если пользователь нажимает произвольную клавишу

на клавиатуре. В этом случае орма также должна закрываться.

добавьте на орму

 

Чтобы вызвать закрытие ормы logo по истечении 5

 

элемент Timer, задайте значение свойства Interval равным секунд,5000 а значение свойства

Enabled равным true. Создайте обработчик события Ti k таймера и внутри тела

укажите команду Close() так же, как это было сделано выше для закрытия ормыункциипр

нажатии на кнопку.

 

 

logo ïðè

любой клавиши на клавиату•

 

Чтобы вызвать закрытие

ре, для ормы создайте обработчикормысоб тия KeyDownнажатиив теле ункции для этого события

также укажите ункцию Close().

26

 

ïîÿ

Сохраните проект и запустите приложение. Если все сделано правильно, сначала

тся орма с заставкой, она закрое ся сама через 5 секунд и и при нажатии любой

клавиши на клавиатуре. После ее закры ия вы увидите орму-калькулятор.

 

4.3 азработка ормы входа приложение

 

Для того, чтобы после ормы с

заставкой появлялась орма входа в приложение

password íå

вызвать ее из ункции Load главной ормы Form1 так же, как это

было сделанобходимодля рмы logo. Добавьте в ункцию Load две новые строки:

w

d^ passform = g new password();

passform->ShowDialog();

 

Здесь мы создвли экземпляр класса password и применили к нему метод ShowDialog(),

чтобы открыть орму password как диалоговое окно. В айл Form1.h добавьте строку

#in lude "password.h"

 

так же, как это было сделано для айла logo.h выше.

 

при запуске приложения после ормы с заставкой появится орма password.

 

Теперь нужно определить свойства ормы password и ее поведение, как указано

 

задачи: орма password должна содержать два поля: для ввода имени пользо•

â условияхтеля для ввода

ароля. Если пользователь вводит верные значения, то открывается

êàлькулятор, иначе

ïриложение закрывается.

 

 

орму password два текстовых поля, уста овите свойство Name пер•

вого поляДобавьтезначение login, а

Name второго поля в значение passwd. Добавьте

к каждому полю элемент Labelзначениеук жите в свойстве Text каждой метки, какого рода

ин ормацию должен ввести поль ов тель в поле (имя, пароль). азместите на орме

две кнопки эл менты Button со начениями свойства Text равными соот ественно OK и

Can el. Значение свойства Name задайте

равными ok и an el для первой и второй кнопок

соответственно.

 

 

 

Основные свойства элементов, размещенных на этой орме, и самой ормы пред•

ставлены ниже.

 

 

1) Свойство ормы StartPosition со значением S reenCenter позволяет разместить

орму по центру экрана при ее запуске.

2) Свойство ормы KeyPreview о

чением true, чтобы орма реагировала на нажа•

тие клавиш на клавиатуре поñëåçíàпуска. 27

 

3)

том числе панельFormBorderStyleс кнопками сверху.

 

 

None уберет рамку вокруг ормы,

 

4)

Свойство ормы ShowInTaskBar

 

значениемfalse приведет к тому, что орма не

 

 

пока не созданы обработчики событий

äëÿ

ее закрытия. Злобный смех за кадром...)

 

5)

будут отображаться в панели задач (и по ьзователь никак не сможет орму закрыть,

 

В свойстве ормы A eptButton выберите кнопку с именем ok, чтобы обработчик

 

 

события для этой кнопки запускался при нажатии на клавишу [Enter на клавиа•

 

6)

òóðå.

 

 

 

 

 

 

 

 

 

В свойстве ормы Can elButton выберите кнопку с именем an el, чтобы

 

 

чик события для этой кнопки запускался при нажатии на клавишу [Es наобработ•клави

 

7)

атуре.

 

 

 

 

свойстве PasswordChar символ, который бу•

 

Для текстового поля passwd укажите

 

8)

дет отображаться в поле вместо

введенного пароля. ok в значение OK.

 

9)

Установите значение свойства DialogResult кн пки an el в значение Can el.

Для того, чтобы происходила проверка имени пользователя

пароля, воспользуемся об•

работчиком события Cli k кнопки ok. Создайте заголовок ункции для обработки этого

события. Функция может иметь следующий вид:

ender, System::EventArgs^ e)

private: System::Void ok Cli k(Sy tem::Obje t^

 

{

if(login->Text=="user" && pass

->Text=="password")

 

 

 

DialogResult=System::Windows::Forms::DialogResult::OK;

 

 

{

 

 

 

 

 

 

 

 

 

 

}

 

 

 

 

 

 

 

 

 

else{

 

 

 

 

 

 

 

 

}

 

DialogResult=System::Windows::Forms::DialogResult::Can el;

 

}

÷òî åñ

è â

 

 

поле пользователь ввел слово user (т.е.

Здесь, сущности,

 

 

èìÿ

пользователя), указано,во второе поле

онпервоекачестве пароля ввел password, то свойству

 

 

 

 

 

 

28

 

 

 

èíîðìûормациюDialogResultâ îäíî ïîëåприсва(иливаетсяоба поля),значението значениеOK, иначе,DialogResultесли пользовательбудетââåëравноневернуюCan el.

Важно

 

 

что при нажатии кнопки an el свойство DialogResult будет также

равно Canотметить,el поскольку в этом случае свойству ормы DialogResult будет присвоено

значение свойства DialogResult

а для кнопки Can el оно

значение Can el.

 

 

Теперь необходимо вернутьсякнопки,событию Load ормы Form1имеетуказать, что если

свойство DialogResult

ормы password имеет значение OK, то можно запускать

предыорму•

калькулятор (т.е. пользователь ввел правильный пароль и имя

 

íà

дущей орме). Если же свойство DialogResult ормы passwordпользователяимеет

 

Can el

(пользователь неверно ввел пароль и/или имя

то приложе ачениенеобход мо

закрыть. Для того, чтобы реализовать такую проверку,льзователя),ункцию Load

нужно добавить:

if (passform->DialogResult!=System::Windows::Forms::DialogResult::OK)

 

 

{

System::Windows::Forms::Appli ation::Exit();

 

 

 

 

}

 

 

 

 

Обратите внимание, что здесь первый раз происходит обращение к свойству дополни•

тельной ормы внутри главной ормы: мы явно указали passform->DialogResult, т.е.

проверяется свойство DialogResult ормы passform. Если значение его не равно OK, при•

ложение будет закрыто.

 

 

 

 

 

 

ùèì:

Таким образом, полностью обработчик события Load ормы Form1 будет следую•

private: System::Void Form1_Load(System::Obje t^ sender, System::EventArgs^ e)

 

{

logo

^ logoform = g new logo();

 

 

 

 

 

 

 

d^ passform = g new pas word();

 

 

 

 

 

passf

m-

();

 

 

 

 

 

 

if (pa sform>Show- DialogResult!=System::Wi dows::Forms::DialogResult::OK)

 

 

}

{

System::Windows::Forms::Appli ation::Exit();

 

 

 

 

}

 

 

 

 

Дополнительно установите свойство StartPosition ормы Form1 в значение CenterS reen. 29

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]