Борис Пахомов Санкт Петербург бхв петербург 2013 удк 004. 4 Ббк 32. 973. 26018. 2 П
Скачать 17.38 Mb.
|
и приложением В этой главе мы рассмотрим некоторые компоненты, с помощью которых разработчик приложения может создать удобный интерфейс, позволяющий пользователю программного обеспечения легко общаться и управлять последним. Как известно из предыдущего материала, каждый компонент характеризуется тремя наборами данных, определяющими его функциональность свойства, события и методы. Мы рассмотрим только компоненты первой необходимости, т. к. стечением времени разработчики среды пополняют ее все большим количеством компонентов, на описание которых потребуется не одна толстая книга. Владея принципами работы с основными компонентами, пользователь среды VC++ может самостоятельно осваивать новые, пользуясь справочной помощью (Help), поставляемой со средой системы. В работе с компонентами используется механизм классов и пространств имен, определенный в библиотеке классов .NET Framework, которая включает в себя классы, интерфейсы, различные типы данных, обеспечивающие доступ к функциональным возможностям среды разработки. С целью достижения совместимости между различными языками, в библиотеке предусмотрен инструмент CLS (Com- mon Language Specification). В данной версии среды разработки используется NET Framework версии 4.5 Beta. В ней много дополнений по сравнению с версией 4, применяемой в среде 2010. Но что любопытно для начинающего программиста массивы могут занимать до двух гигабайт памяти. Это очень существенно. В библиотеке определены такие элементы основные типы данных и аппарат исключений структуры данных элементы, обеспечивающие ввод/вывод данных элементы, предоставляющие информацию о типах данных элементы, обеспечивающие безопасность данных элементы, обеспечивающие доступ к данным богатый графический пользовательский интерфейс. 246 Часть II. Приложения Windows В библиотеке .NET Framework имеется достаточный набор как абстрактных (на их основе создаются конкретные классы, таки конкретных классов. Родственные типы в этой библиотеке объединены в пространства имен, чтобы легче было сними работать. Первая часть полного имени — это имя пространства имен. Последняя часть имени — это тип имени. Например представляет тип ArrayList , который принадлежит пространству Типы данных из этого пространства используются для работы с наборами объектов. Пространство имен Это пространство является базовым для фундаментальных типов данных в .NET Framework. Оно включает в себя классы, применяемые в базовых типах данных, которые используются всеми приложениями Object (корневой класс в наследственной иерархии классов, Byte , Char , Array , Int32 , String и т. д. Большинство из этих типов соответствуют первичным типам данных, используемым в языке программирования. В табл. 11.1 представлен список некоторых типов данных для С. Таблица Типы данных для С++ Категория данного Имя класса Описание данного Integer Byte 8- битовое беззнаковое целое 8- битовое целое со знаком 16- битовое целое со знаком 32- битовое целое со знаком 64- битовое целое со знаком 16- битовое целое без знака 32- битовое целое без знака 64- битовое целое без знака Float Single С обычной (32 бита) точностью число с плавающей точкой С двойной (64 бита) точностью число с плавающей точкой Boolean Логическое (булево) число (true или false ) Другие типы Unicode (16- битовый) символ Десятичное (128 бит) значение Целое со знаком, значение которого зависит от соответствующей платформы 32 - битовое значение на 32 - битовой платформе и 64 - битовое на 64 - битовой платформе UIntPtr Целое без знака, значение которого зависит от соответствующей платформы 32 - битовое значение на 32 - битовой платформе и 64- битовое на 64 - битовой платформе Классы Object Корневой класс для иерархии классов Строка Unicode символов постоянной длины Глава 11. Компоненты, создающие интерфейс между пользователем и приложением 247 Работа с переменными некоторых типов Как работать с переменными, показано на примере обработчика обычной кнопки, где приведены способы работы со строковыми, числовыми и логическими переменными. Текст обработчика приведен в листинге 11.1. Листинг 11.1 private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { Проверка методов и свойств класса String String ^s="123456789"; String ^s1; очистка строки s1=s->Empty; //s1="" сравнение строк s="12345"; s1="12345"; int i=s->Compare(s,s1);//i=0 s1="1234"; i=s->Compare(s,s1); //i=1 s1="123458"; i=s->Compare(s,s1); //i=-1 сцепление строк s1=s->Concat(s,s1); //s1="12345123458" копирование s в s1 s1=s->Copy(s); //s1="12345" вставка подстроки, начиная сданного индекса s=s1->Insert(2,"**"); //s=12**345 поиски возврат индекса первого вхождения подстроки (45) в данную строку String ^a1="123"; String ^a2="12345"; i=a2->IndexOf("45"); //i=3 (индекс изменяется от 0) i=a2->IndexOf("45",2); //i=3 (поиск идет от заданного) индекса) i=a2->IndexOf("12",1,3); //i=-1 вхождения не обнаружено) Поиск идет от заданного индекса (1) и проверяется заданное количество символов (3)*/ поиски возврат индекса последнего вхождения заданной подстроки в строку a2="12121212"; i=a2->LastIndexOf("12"); //i=6 248 Часть II. Приложения Windows определение длины строки i=a2->Length; //i=8 /* Помещение строки (а) в поле заданной ширины (6 символов, позиции, оставшиеся незанятыми, слева (справа) заполняются пробелами */ a2=a1->PadLeft(6); //a2=" 123" a1=a2->PadLeft(3); //a1="123" a2=a1->PadRight(6); //a2=" 123" Удаление заданного количества символов из строки a1="12345678"; a1=a1->Remove(3,4); /*a1="1238" (удаляет 4 символа, начиная с й позиции Замена всех встречающихся в м параметре символов на символы из го параметра a1="12345678"; a2=a1; a2=a1->Replace(a1,"*//*"); // a2="*//*" a1="123"; a2="456"; a1=a1->Replace(a1,a2);// a1="456" Выделение подстроки a1="123456"; a2=a1->Substring(4); /*a2="56" (выделение подстроки с заданной позиции до конца строки a1="123456"; a2=a1->Substring(1,2); //a2="23" выделение символов сданной позиции (й параметр) в заданном количестве (й параметр Вставка подстроки в строку, начиная с заданного индекса a1="123***"; a2="456"; a2=a1->Insert(5, a2);//a2="123**456" Проверка методов и свойств данных категории Integer Преобразование числовой строки в битовое целое i=i.Parse("12345"); //i=12345 целое — в строку a1=i.ToString(); //a1="12345" //умножение/деление i=i/10; //i=1234 Глава 11. Компоненты, создающие интерфейс между пользователем и приложением 249 i=i/2; //i=617 i=i*0.5; //i=308 Работа сданными. y=b/10; //y=1.01....... Работа с логическими данными Boolean z,v; z=01; //z=true v=z & 01; //v=true z=0; //z=false v=z | 01; //v=true В процессе разработки приложений постоянно приходится сталкиваться с необходимостью преобразования данных различных типов одно в другое. Например, дату в формате DateTime надо представить в виде строки, чтобы вывести ее в удобном для пользователя виде, и т. д. Как преобразовывать данные различных типов Есть несколько способов. Однако наиболее простой — применение методов специального класса Convert . Примеры преобразования типов данных показаны в листинге 11.2. Листинг 11.2 private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { Double dNumber = 23.15; это число преобразуется в различные типы. Везде идет функция имя типа, в который преобразуются все методы из класса Convert // Returns 23 Int32 iNumber = Convert::ToInt32( dNumber ); //double to int // Returns True Boolean bNumber = Convert::ToBoolean( dNumber ); /* double to Boolean*/ // Returns "23.15" String^ strNumber = Convert::ToString( dNumber ); /* double to String ^ (также и int to String ^)*/ 250 Часть II. Приложения Windows Form // Returns '2' //String ^ to Char Char chrNumber = Convert::ToChar(strNumber->Substring(0, 1)); Сначала выделили один символ // DateTime to String ^ String ^s="03/03/2007"; DateTime d = Convert::ToDateTime(s); String ^s1 = Convert::ToString(d); } Компонент Компонент находится в группе компонентов All Windows Forms палитры компонентов. Этот компонент создает в форме, куда он помещен, элемент "кнопка, который надо нажимать щелчком мыши. Компонент Button обладает некоторыми свойствами, определяющими его поведение. Вид его в форме показан на рис. 11.1. Рис 11.1. Вид компонента Свойства Перечень свойств компонента представлен на рис. 11.2. Многие свойства нам уже знакомы — мыс ними встречались при изучении формы. Рассмотрим некоторые из незнакомых свойств. Anchor — свойство, определяющее закрепленную позицию компонента. Если вы разрабатываете форму таким образом, чтобы пользователь мог изменять ее размеры в режиме исполнения приложения, то компоненты на вашей форме тоже должны соответственно изменяться в размерах. Когда компонент "зацеплен" за форму, а форма изменяется в размерах, тов случае "зацепления" компонент поддерживает дистанцию между собой и позицией анкера. Свойство Anchor взаимодействует со свойством AutoSize Глава 11. Компоненты, создающие интерфейс между пользователем и приложением 251 Рис 11.2. Перечень свойств компонента Button AutoEllipsis — это свойство задает, будет ли появляться многоточие справа от текста, сообщая, что текст распространяется за пределы, отведенные размерами компонента. Если установить значение свойства в true , то когда пользователь проведет мышью над компонентом (в режиме исполнения приложения, текст, выходящий за пределы нижней части компонента, выведется в виде подсказки. Но следует помнить чтобы установить свойство в true , надо свойство AutoSize установить в false . Если же AutoSize останется равным true , многоточие не появится. Все сказанное демонстрируется на рис. 11.3. DialogResult — свойство, значение которого выбирается из выпадающего списка. Служит для обеспечения закрытия формы, открытой как модальная (см. пояснение в разд. "Некоторые методы формы" главы 10). Dock — с помощью этого свойства обеспечивается причаливание (стыковка) компонентов (в частности, и кнопки) к различным сторонам формы или заполнение ими полностью какого-либо контейнера (компонента, который может содержать в себе другие компоненты, например, это может быть форма или панель. Чтобы обеспечить причаливание компонента, следует 1. Выбрать компонент, который требует причаливания. 2. Раскрыть выпадающий список свойства компонента Dock . Откроется схема, состоящая из прямоугольников, имитирующих стороны формы и ее центр. 3. Щелкнуть на прямоугольнике, обозначающем сторону формы, к которой мы хотим пристыковать наш компонент. Если требуется полное заполнение ком- 252 Часть II. Приложения Windows Рис 11.3. Демонстрация работы свойства AutoEllipsis понентом, то надо щелкнуть на центральном прямоугольнике. Если не требуется стыковка, надо выбрать значение None . После этого произойдет автоматическое пристыковывание к выбранной стороне формы или ее заполнение. Варианты причаливания к нижней кромке формы, а также и полное заполнение формы компонентом (с применением для наглядности свойства формы) показаны на рис. 11.4. FlatAppearance — это свойство используется, если свойство кнопки FlatStyle равно Flat . С помощью этого свойства можно задать окантовку кнопки, а также проследить в момент исполнения приложения за состоянием кнопки. Если развернуть это свойство на несколько подсвойств (двойной щелчок на имени свойства появятся подсвойства, которые можно устанавливать, то, задав каждое из Рис 11.4. Вариант причаливания Глава 11. Компоненты, создающие интерфейс между пользователем и приложением 253 них, получим желаемое. Можно выбрать цвет окантовки кнопки (если щелкнуть в поле свойства BorderColor , тов конце поля появится кнопка, открывающая доступ к выбору цвета, можно выбрать цвет самой кнопки, в который она окрасится, когда на нее наведут курсор мыши, можно выбрать цвет, в который окрасится поле кнопки, если на нее нажать. Все сказанное показано на рис. 11.5. Рис 11.5. Демонстрация работы свойства Рис 11.6. Виды стилей кнопок — задает стиль кнопки. Различные стили кнопок показаны на рис. 11.6. Стиль выбирается из выпадающего списка, который открывается кнопкой, появляющейся после щелчка мышью в поле этого свойства. Image — это свойство, позволяющее через кнопку с многоточием выбрать изображение, которое поместится в поле кнопки, но при условии, что значение FaltStyle не будет равно System ImageAlign — c помощью этого свойства выравнивают изображение на кнопке в поле свойства есть кнопка, которая открывает схему выравнивания, состоящую из ряда прямоугольников. На каком прямоугольнике мы щелкнем, в такое поле кнопки и сдвинется изображение. это свойство связано со свойством ImageList , задающим ссылку наряд изображений (пиктограмм, которые выбираются этим компонентом через диалоговое окно, открывающееся в поле этого свойства. Надо поместить ImageList в форму, тогда его имя станет видимым в поле свойства кнопки. Каждому изображению в списке присваивается свой порядковый номер (индекс, по которому впоследствии и можно будет выбирать нужное, или 254 Часть II. Приложения Windows ключ, в качестве которого служит название файла-изображения. Свойство кнопки выбирается из списка (при открытии списка становятся видны все индексы, сформированные компонентом ImageList ). Свойство кнопки тоже формируется открытием списка значений, в качестве которых выступают имена файлов пиктограмм, сформированные компонентом В рассматриваемом свойстве как рази задается индекс нужного изображения из списка изображений. По нему в кнопке должна появиться пиктограмма. TabIndex — в это свойство помещается сформированный средой программирования порядковый номер компонента в контейнере, например, в форме (мы пока не знаем другого контейнера, кроме формы. Какие номера имеют свойства TabOrder , в такой последовательности и станут активизироваться (получать фокус ввода) компоненты в форме после запуска приложения при последовательном нажатии клавиши , то символ & будет показываться в текстовой строке, иначе (при его не будет видно. Значение по умолчанию true UseVisualStyleBackColor — задает возможность использования визуальных стилей для фонового цвета компонента. Такие стили в системе специфицированы. Например, эти стили определяют цвет, размер или шрифт компонента. Свойство дает возможность координации этих параметров с интерфейсом вашего приложения это свойство обеспечивает видимость или невидимость компонента в режиме исполнения приложения. События Перечень событий кнопки показан на рис. 11.7. Большинство событий по-своему аналогичны одноименным событиям формы. Рассмотрим некоторые события Click — возникает, когда на кнопке щелкают мышью Enter — возникает, когда кнопка получает фокус ввода, те. становится активной (ее можно нажимать MouseHover — возникает, когда курсор мыши находится над кнопкой. Поэтому событию можно, например, изменять свойства кнопки (как-то ее выпячивать, Глава 11. Компоненты, создающие интерфейс между пользователем и приложением 255 чтобы пользователю было видно, что он сейчас держит мышь именно над той кнопкой, на которую ему следует нажать MouseLeave — возникает, когда курсор мыши покидает кнопку. Здесь также можно воспользоваться наступлением этого события ив противоположность предыдущему свойству, на основе которого изменены свойства кнопки, теперь их восстановить, чтобы кнопка приняла прежний вид. Рис 11.7. События кнопки Методы Кнопка имеет большое число методов, главным образом унаследованных от своих классов-предков. Рассмотрим только некоторые из них Hide() — прячет кнопку (делает ее невидимой Focus() — делает кнопку активной (ее можно нажимать Select() — работает аналогично Focus() ; Show() — показывает кнопку (присваивает ее свойству Visible значение true ). Компонент Этот компонент находится в списке All Windows Forms палитры компонентов. Панель это компонент, который, как и форма, является контейнером, куда поме- 256 Часть II. Приложения Windows Form щаются другие компоненты. Панели обеспечивают общее (родовое) поведение для компонентов, помещенных в них панельные компоненты могут содержать другие компоненты, объединяя их в единое целое. При перемещении панели такие компоненты перемещаются вместе с ней. Вид панели, помещенной в форму, и некоторые действия с ней показаны на рис. 11.8. Рис 11.8. Вид панели Некоторые свойства Свойства панели, отображенные в окне Properties, показаны на рис. 11.9. Ничего особенного по сравнению с кнопкой мы здесь невидим. Но так как панель это контейнер, тов него могут помещаться другие компоненты. Поэтому возможна потеря их видимости в этом контейнере. Отсюда возникли свойства, связанные с введением скроллинга (прокрутки) для такого компонента. Это такие свойства, как AutoScroll , AutoScrollMargin и. Первое из них обеспечивает введение автоматического скроллинга по вертикали и по горизонтали в момент, когда очередной компонент, помещаемый на панель, становится видимым не полностью (не помещается весь на панель. Второе свойство определяет отступы от сторон панели при скроллинге, а третье свойство определяет минимальный размер полос прокрутки, создаваемых для скроллинга. Некоторые события Перечень событий компонента, отображенный в окне |