
- •Перечислите основные типы данных языка с. Объясните, что такое модификаторы и спецификаторы типов. Дайте классификацию операций в языке с. Опишите структуру программы на с.
- •Оператор "запятая" (,)
- •Объявление массивов в программе
- •Перечисляемый тип данных
- •Переименование типов typedef
- •Основная форма описания функции имеет вид:
- •Дайте определение строкового типа в c#, приведите примеры объявления и создания строк. Перечислите основные методы стандартного класса String. Приведите примеры.
- •Дайте определение понятия делегат и приведите синтаксис его объявления. Поясните цели и принципы использования делегатов в c#. Приведите пример использования делегатов.
Дайте определение понятия делегат и приведите синтаксис его объявления. Поясните цели и принципы использования делегатов в c#. Приведите пример использования делегатов.
Delegate-это объект который может ссылаться на метод. Этот метод можно вызвать с помощью соответствующей ссылки. Делегат в с # апалогчен с указателем на ф-цию в с, с++.
Метод который будет вызван делегатом определ.во време работы программы.
Delegate тип_возврата, имя(список параметров), где тип_возврата-это тип возвращаемых методами которые вызывает делегат.
Список параметров-это переменные принимаемые методами которые делегат будет вызывать.
Пример:
Delegste void del(string str);
Maim…
{static public void replace Spaces(refstring a)
{a=a.replace(‘’, ‘-‘;);}
Static public void reverse(revstring a)}
String temp= “ ";
Int I,j;
For(j=0’ i<a,length-1; i>=0; i--,j++)
Temp t=a[i];
A= temp;
Static void main()
{istring str=”I cem”;
Del d;
Del rD=newdel(replaseSpaces);
Del red=new del (revers);
A=rd;
Dt=revD;
D=(rev str);
d-=revers;
str=”I am”;
d=(rev str);
}
Дайте определение понятию смешанное программирование. Приведите сравнительную характеристику языков программирования Pascal, Assembler, C/C++/C#. Сформулируйте правила совместного использования модулей, написанных на языках Pascal, Assembler, C/C++/C#.
Смешанное программирование - это процесс построения программ, в которых код написан на двух или более языках. Такое программирование позволяет:
вызывать выполняемый код написанный на другом языке
использовать процедуры, которые сложно реализовать на специфическом языке
повышать скорость вычислительного процесса
Pascal & Assembler: паскаль предает параметры в вызываемую подпрограмму через стек в прямом парядке. Основную программу следует писать на паскале, а модуль на ассемблере должен быть оттранслирован и подключен. Все ассемблеровские ф-ции должны размещаться в сегменте с именем:.code, все переменные :.date. после объявления процедуры в паскале необходимо написать extern.
C\C++ & Assembler: все параметры передаются в стек в обратном порядке. Перед написание ф-ции необходимо записать директиву extern
\
28. айте характеристику и опишите основные свойства и события компонентов среды C++ Builder, которые используются для работы с текстовой информацией. Поясните, как в приложение загрузить документ или сохранить изменения
Свойства компонента Memo:
Name - Имя компонента. Используется в программе для доступа к свойствам компонента
Text - Текст, находящийся в поле Memo. Рассматривается как единое целое
Lines - Текст, находящийся в поле Memo. Рассматривается как совокупность строк. Доступ к строке осуществляется по номеру
Lines .Count - Количество строк текста в поле Memo
Left - Расстояние от левой границы поля до левой границы формы
Top - Расстояние от верхней границы поля до верхней границы формы
Height - Высоту поля
Width - Ширину поля
Font - Шрифт, используемый для отображения вводимого текста
ParentFont - Признак наследования свойств шрифта родительской формы
Класс TRichEdit
Property Свойства
SelLength , SelStart Выделение текста
Methods Методы
FindText Поиск в тексте по образцу, в указанном диапазоне.
Lines.Add Добавляет строку в конец текста.
Работа с файлами с использованием функций компонент
Многим визуальные компоненты и некоторые классы имеют доступ к функциям:
LoadFromFile("Имя файла");
SaveToFile("Имя файла");
Эти функции особенно удобны для работы с текстовыми фыйлами.
Примеры загрузки и сохранения файлов:
//Визуальный компонент TMemo:
Memo1->Lines->Clear();
Memo1->Lines->LoadFromFile("a.txt");
......
Memo1->Lines->SaveToFile("a.txt");
......
//Класс TStringList:
TStringList * ptStrintList;
ptStrintList->Clear();
ptStrintList=new TStringList();
ptStrintList->LoadFromFile("a.txt");
......
ptStrintList->SaveToFile("a.txt");
......
ptStrintList->Free();
//Визуальный компонент TListBox1:
ListBox1->Items->Clear();
ListBox1->Items->LoadFromFile("a.txt");
......
ListBox1->Items->SaveToFile("a.txt");
//Визуальный компонент TListBox1:
ComboBox1->Items->Clear();
ComboBox1->Items->LoadFromFile("a.txt");
......
ComboBox1->Items->SaveToFile("a.txt");
//Визуальный компонент TRichEdit:
RichEdit1->Lines->Clear();
RichEdit1->Lines->LoadFromFile("a.txt");
.....
RichEdit1->Lines->SaveToFile("a.txt");
И.т.д.
При использовании функции SaveToFile если файл не существует, то он будет создан. Во всех приведенных выше примерах создаются текстовые файлы. Компонент TRichEdit создает текстовый файл в формате .rtf, поэтому логичнее записать:
RichEdit1->Lines->SaveToFile("a.rtf");
35. дайте характеристику и опишите основные свойства и события компонентов среды C++ Builder, которые используются для работы с базами данных по технологии BDE. Опишите принцип разработки приложения, работающего с базой данных по технологии BDE. Приведите примеры запросов с помощью фильтров
Компонент TDataSource
Компонент DataSource действует как посредник между компонентами TDataSet (TTable, TQuery, TStoredProc) и компонентами Data Controls - элементами управления, обеспечивающими представление данных на форме. Компоненты TDataSet управляют связями с библиотекой Borland Database Engine (BDE), а компонент DataSource управляет связями с данными в компонентах Data Controls.
Cвойство DataSet компонента DataSource идентифицирует имя компонента TDataSet.
Cвойство Enabled компонента DataSource активизирует или останавливает взаимосвязь между компонентами TDataSource и Data Controls.
Свойство AutoEdit компонента DataSource контролирует, как инициируется редактирование в компонентах Data Controls.
Cобытие OnUpdateData компонента DataSource наступает, когда пользователь пытается изменить текущую запись в TDataSet.
Компонент TTable
Наиболее простым способом обращения к таблицам баз данных является использование компонента TTable, предоставляющего доступ к одной таблице. Свойства:
Active - указывает, открыта (true) или нет (false) данная таблица.
DatabaseName - имя каталога, содержащего искомую таблицу, либо псевдоним (alias) удаленной БД
TableName - имя таблицы.
Exclusive - если это свойство принимает значение true, то никакой другой пользователь не может открыть таблицу, если она открыта данным приложением.
IndexName - идентифицирует вторичный индекс для таблицы. Это свойство нельзя изменить, пока таблица открыта.
MasterFields - определяет имя поля для создания связи с другой таблицей.
MasterSource - имя компонента TDataSource, с помощью которого TTable будет получать данные из связанной таблицы.
ReadOnly - если это свойство равно true, таблица открыта в режиме "только для чтения". Нельзя изменить свойство ReadOnly, пока таблица открыта.
Eof, Bof - эти свойства принимают значение true, когда указатель текущей записи расположен на последней или соответственно первой записи таблицы.
Fields - массив объектов TField. Используя это свойство, можно обращаться к полям по номеру
Методы:
Open и Close устанавливают значения свойства Active равными True и False соответственно.
Refresh позволяет заново считать набор данных из БД.
First, Last, Next, Prior перемещают указатель текущей записи на первую, последнюю, следующую и предыдущую записи соответственно
MoveBy перемещает указатель на указанное число строк (оно может быть и отрицательным) в пределах таблицы
Insert, Edit, Delete, Append - переводят таблицу в режимы вставки записи, редактирования, удаления, добавления записи соответственно
Post - осуществляет физическое сохранение измененных данных
Cancel - отменяет внесенные изменения, не сохраненные физически
FieldByName - предоставляет возможность обращения к данным в полях по имени поля
SetKey переключает таблицу в режим поиска
GotoKey начинает поиск строки, значение Fields[n] которой равно выбранному, где n - номер колонки таблицы, начиная с 0
SetRangeStart, SetRangeEnd, ApplyRange позволяют выбрать нужные строки на основе диапазона значений какого-либо поля
FreeBookmark, GetBookmark, GotoBookmark- позволяют создать помеченную строку в таблице и затем вернуться к ней позже
Компонент TDBGrid
Компонент TDBGrid обеспечивает табличный способ отображения на экране строк данных из компонентов TTable или TQuery. Приложение может использовать TDBGrid для отображения, вставки, уничтожения, редактирования данных БД. Обычно DBGrid используется в сочетании с DBNavigator, хотя можно использовать и другие интерфейсные элементы, включив в их обработчики событий методы First, Last, Next, Ptior, Insert, Delete, Edit, Append, Post, Cancel компонента TTable.
Для получения данных из баз данных BDE в программе на C++ Builder используются два компонента с вкладки BDE: Table и Query. Обеим компонентам необходимо проставить свойство DatabaseName (имя базы данных), компоненту Table также необходимо проставить свойство TableName (имя таблицы).
Помимо стандартных компонентов, для отображения данных из базы можно использовать компоненты с вкладки Data Controls, которые могут получать данные из таблиц. Для того, чтобы связать компонент с вкладки Data Controls с таблицей, необходимо использовать компонент DataSource с вкладки Data Access, указав ему в свойстве DataSet таблицу Table или запрос Query. После этого этот компонент DataSource можно указать в соответствующем поле (DataSource или ListSource) компонента с вкладки Data Controls.
Из всех компонентов с вкладки Data Controls особенно следует отметить компоненты DBGrid (аналог StringGrid, берущий данные из DataSource, связанного с Table или Query) и DBLookupComboBox, предоставляющий удобный способ выбора одного из возможных значений. Для работы DBLookupComboBox необходимо установить значения для полей ListSource (не DataSource!), ListField (поле, которое будет отображаться в компоненте) и KeyField. Например, для таблицы people, состоящей из полей id и name, можно выставить ListField = "name" и KeyField = "id", тогда пользователь сможет выбрать человека по имени, а из программы можно будет получить как выбранное имя (DBLookupComboBox1->Text), так и его идентификатор (DBLookupComboBox1->KeyValue).
Настоящая фильтрация таблиц
Кроме присваивания компоненту Table диапазона значений, можно задать и свой собственный алгоритм фильтрации. Для этого надо просто установить свойство Filtering компонента Table в True, и для каждой записи будет вызываться событие OnFilterRecord. В методе, соответствующем этому событию, можно реализовать любой необходимый фильтр, например:
procedure TDataModule2.Table1FilterRecord(
DataSet: TDataSet; var Accept: Boolean);
begin
if (Table1Country.Value = 'US') or
(Table1Country.Value = 'US Virgin Islands') or
(Table1State.Value = 'Jamaica') then
Accept := True
else
Accept := False;
end;
36. дайте характеристику и опишите основные свойства и события компонентов среды C++ Builder, которые используются для работы с базами данных для построения запросов языка SQL. Приведите примеры запросов. Опишите принцип связывания и поиска по двум и более таблицам.
Компонент TQuery
Компонент TQuery, как и компонент TTable, обладает всеми свойствами компонента TDataSet.
Наиболее часто используются следующие свойства компонента TQuery:
Active - указывает, открыт (true) или закрыт (false) данный запрос
Eof, Bof - эти свойства принимают значение true, когда указатель текущей записи расположен на последней или соответственно первой строке набора данных, являющегося результатом выполнения запроса.
DatabaseName - имя каталога либо псевдоним (alias) удаленной БД, к которой осуществляется запрос.
DataSource - указывает источник данных для параметризованных запросов (т.е. запросов с параметрами, значение которых заранее неизвестно).
Fields - это свойство доступно только во время выполнения (run-time only) и используется для чтения или модификации поля, определяемого по порядковому номеру.
Params - содержит параметры для параметризованного запроса, как SomeNo в следующем примере:
Select * from Orders where CustNo=:SomeNo
SQL - строковый массив, содержащий текст оператора запроса SQL.
Компонент TQuery позволяет использовать операторы SQL для того, чтобы определять или создавать наборы данных, которые можно отобразить на экране, вставлять, удалять и редактировать строки.
RequestLive - если это свойство имеет значение true и синтаксис запроса таков, что его результат может быть модифицируем, пользователь может редактировать данные с сохранением их в базе данных. Если RequestLive имеет значение false, результат запроса возвращается в состоянии read-only.
Наиболее часто используются следующие методы компонента TQuery:
ExecSQL - выполняет SQL-запрос, содержащийся в свойстве SQL, если запрос не возвращает данные. Следует употреблять этот метод при вставке, редактировании или удалении данных. При выполнении же оператора SELECT (выбор данных) следует использовать метод Open. Следующий пример показывает применение метода ExecSQL:
Open - открывает компонент TQuery. Он эквивалентен присвоению свойству Active значения true. Используется, если результатом запроса является набор данных (такие запросы обычно начинаются с оператора SELECT). Пример использования метода Open:
Close - закрывает компонент TQuery. Вызов Close эквивалентен присвоению свойству Active значения false. Пример использования метода Close:
Prepare - обеспечивает передачу серверу баз данных запроса, содержащегося в свойстве SQL, для оптимизации и компиляции. Полный запрос с параметрами не передается, пока не вызваны методы Open или ExecSQL. Даже если метод Prepare не вызывается явно, он будет вызван неявно, если используются методы Open или ExecSQL (в этом можно убедиться, запустив утилиту SQL Monitor). Пример использования метода Prepare:
Компоненты TQuery обладают большим разнообразием методов, унаследованных от TDataSet. Наиболее часто используются следующие методы:
First, Last, Next, Prior перемещают указатель текущей записи на первую, последнюю, следующую и предыдущую записи соответственно, например:
MoveBy перемещает указатель на определенное количество строк.
Insert, Edit, Delete, Append, Post, Cancel - позволяют модифицировать результат запроса. Метод Insert позволяет вносить в результат запроса строки, как в следующем примере:
Метод Post подтвержает операции Insert, Update или Delete, совершая реальное физическое изменение в базе данных. Метод Cancel отменяет незавершенные операции Insert, Delete, Edit или Append.
FreeBookmark, GetBookmark, GotoBookmark- - позволяют создавать закладки (маркированные строки) в запросе и затем вернуться к такой строке позже.
Класс TSQLTABLE Класс TSQLTable представляет таблицу базы данных, доступную для клиента как направленный набор данных. Такой набор содержит все записи для полей, определенных в классе TSQLTable. Объект типа TSQLTable должен быть связан с объектом типа TSQLConnection, определяющим соединение с источником данных. Для отображения такого набора данных нельзя использовать таблицу, так как у клиента отсутствует кэш памяти для набора данных. Значение полей таблицы можно отображать компонентами типа TDBText или TDBEdit. Для перемещений по набору записей доступны только методы First и Next. После размещения в модуле данных или на форме компонента надо выполнить следующие действия:
Установить значение свойства SQLConnection компонента TSQLTable, выбрав добавленный ранее компонент типа TSQLConnection из предлагаемого списка.
Определить имя таблицы базы данных, используемой для построения набора данных, определив свойство TableName компонента TSQLTable.
Класс TUPDATESQL Объект типа TUpdateSQL позволяет для наборов данных, созданных с доступом "только для чтения", поддерживать возможность их обновления посредством выполнения SQL-оператора. Класс TUpdateSQL реализует следующие свойства и методы:
DeleteSQL - свойство, определяющее SQL-оператор DELETE.
InsertSQL - свойство, определяющее SQL-оператор INSERT.
ModifySQL - свойство, определяющее SQL-оператор UPDATE.
ExecSQL - метод, выполняющий один из заданных SQL-операторов (в зависимости от значения параметра, указываемого следующими константами: ukDelete, ukInsert,ukModify).
Класс TDATABASE Класс TDatabase реализует работу с объектом "база данных" и предоставляет средства контроля над соединением с базой данных. Компонент типа TDatabase позволяет управлять транзакциями, использовать настраиваемое подключение к серверу, определять в приложении свои псевдонимы для базы данных. Для работы с компонентом TDatabase необходимо установить значение свойств AliasName и DatabaseName. Если значением свойства AliasName указан DSN существующего источника данных, то разработчик может сам определить любой внутренний (для приложения) псевдоним базы данных и задать его в свойстве DatabaseName. В этом случае для любого набора данных в списке значений свойства DatabaseName будет отображаться наряду со всеми доступными DSN источниками данных и внутренний псевдоним, заданный свойством DatabaseName компонента TDatabase. В том случае, если DSN не определен, то свойство DatabaseName должно содержать полное имя файла базы данных, а свойство DriverName - указывать используемый ODBC-драйвер. Компонент типа TDatabase позволяет управлять режимами работы с наборами данных и транзакциями, используя следующие свойства и методы.
Exclusive - свойство, позволяющее приложению получить исключительный доступ к базе данных (если это поддерживается SQL-сервером);
InTransaction - свойство, указывающее, был ли выполнен для базы данных вызов метода StartTransaction.
ReadOnly - метод, указывающий, установлен ли для соединения с базой данных доступ "только чтение".
TransIsolation - метод, задающий уровень изоляции при управлении транзакциями. Уровень изоляции определяет, как данная транзакция будет взаимодействовать с другими транзакциями, работающими с одними и теми же таблицами.
Свойство TransIsolation может быть указано одним из следующих значений: tiDirtyRead - транзакция может читать данные, которые были изменены другой транзакцией, но для которых не был выполнен вызов Commit (фиксация изменений); tiReadCommitted - позволяет в одной транзакции читать фиксированные изменения, сделанные в базе данных другой транзакцией; tiRepeatableRead - истинность данных гарантируется на все время чтения, и транзакция не видит никаких изменений, сделанных другой транзакцией. Прочитанная запись остается постоянной, пока в ней не будут сделаны изменения внутри самой транзакции;
StartTransaction - метод, открывающий новую транзакцию;
Commit - метод, выполняющий фиксацию текущей транзакции;
Rollback - метод, выполняющий откат текущей транзакции;
Execute - метод, который выполняет указанный параметром SQL-оператор, не возвращающий результирующего набора.
Свойства компонента Table masterfields и mastersource участвуют в образовании связи двух таблиц (ведущей и ведомой) по принципу master-detail
37. дайте характеристику и опишите основные свойства и события компонентов среды C++ Builder, которые используются для работы с системными диалогами. Поясните, как запустить печать из приложения.
Диалоги открытия и сохранения файлов — компоненты OpenDialog, SaveDialog, OpenPictureDialog, SavePictureDialog
Компоненты OpenDialog — диалог «Открыть файл» и SaveDialog — диалог «Сохранить файл как...», пожалуй, используются чаще всего, в большинстве приложений. Примеры открываемых ими аналоговых окон приведены на рис. 3.36 и 3.37.
Все свойства этих компонентов одинаковы, только их смысл несколько различен для открытия и закрытия файлов. Основное свойство, в котором возвращается в виде строки выбранный пользователем файл, — FileName. Значение этого свойства можно задать и перед обращением к диалогу. Тогда оно появится в диалоге как значение по умолчанию в окне Имя файла (см. рис. 3.36 и 3.37).
Типы искомых файлов, появляющиеся в диалоге в выпадающем списке Тип файла (рис. 3.36 и 3.37), задаются свойством Filter. В процессе проектирования это свойство проще всего задать с помощью редактора фильтров, который вызывается нажатием кнопки с многоточием около имени этого свойства в Инспекторе Объектов. При этом открывается окно редактора, вид которого представлен на рис. 3.38. В его левой панели Filter Name вы записываете тот текст, который увидит пользователь в выпадающем списке Тип файла диалога. А в правой панели Filter записываются разделенные точками с запятой шаблоны фильтра. В примере рис. 3.38 задано два фильтра: текстовых файлов с расширениями .txt и .doc и любых файлов с шаблоном *.*.
Свойство FilterIndex определяет номер фильтра, который будет по умолчанию показан пользователю в момент открытия диалога. Например, значение FilterIndex = 1 задает по умолчанию первый фильтр.
Свойство InitialDir определяет начальный каталог, который будет открыт в момент начала работы пользователя с диалогом. Если значение этого свойства не задано, то открывается текущий каталог или тот, который был открыт при последнем обращении пользователя к соответствующему диалогу в процессе выполнения данного приложения.
Свойство DefaultExt определяет значение расширения файла по умолчанию. Расширение указывается без точки (например, «txt») Если значение этого свойства не задано, пользователь должен указать в диалоге полное имя файла с расширением. Если же задать значение DefaultExt, то пользователь может писать в диалоге имя без расширения. В этом случае будет принято заданное расширение.
Свойство Title позволяет вам задать заголовок диалогового окна. Если это свойство не задано, окно открывается с заголовком, определенным в системе (например, «Открытие файла» в окне на рис. 3.36). Но вы можете задать и свой заголовок, подсказывающий пользователю ожидаемые действия. Например, «Укажите имя открываемого файла».
Свойство Options определяет условия выбора файла. Множество опций, которые вы можете установить программно или во время проектирования, включает:
По умолчанию все перечисленные опции, кроме ofHideReadOnly, выключены. Но, как видно из их описания, многие из них полезно включить перед вызовом диалогов.
Если вы разрешаете с помощью опции множественный выбор файла, то список выбранных файлов можно прочитать в свойстве Files типа TStrings.
При включении опции ofOldStylcDialog диалог приобретает вид, представленный на рис. 3.39. Помимо включенной опции ofOldStyIeDialog в этом примере заданно значение свойства Title и этот текст отображается в заголовке окна. Кроме того, в данном примере выключена опция ofHideReadOnly, что привело к появлению индикатора «Только чтение».
В компонентах диалогов открытия и сохранения файлов предусмотрена возможность обработки ряда событий. Такая обработка может потребоваться, если рассмотренных опций, несмотря на их количество, не хватает, чтобы установить все диктуемые конкретным приложением ограничения на выбор файлов. Событие OnCanClose возникает при нормальном закрытии пользователем диалогового окна после выбора файла. При отказе пользователя от диалога — нажатии кнопки Отмена, клавиши Esc и тогда событие OnCanClose не наступает. В обработке события OnCanClose вы можете произвести дополнительные проверки выбранного пользователем файла и, если по условиям вашей задачи этот выбор недопустим, вы можете известить об этом пользователя и задать значение false передаваемому в обработчик по ссылке параметру CanClose. Это не позволит пользователю закрыть диалоговое окно.
Можно также написать обработчики событий OnFolderChange — изменение каталога, OnSelectionChange — изменение имени файла, OnTypeChange — изменение типа файла. В этих обработчиках вы можете предусмотреть какие-то сообщения пользователю.
Теперь приведем примеры использования диалогов OpenDialog и SaveDialog. Пусть ваше приложение включает окно редактирования RichEdit1, в которое по команде меню Открыть вы хотите загружать текстовый файл, а после каких-то изменений, сделанных пользователем, — сохранять по команде Сохранить текст в том же файле, а по команде Сохранить как... — в файле с другим именем.
Вы вводите на форму компоненты — диалоги OpenDialog и SaveDialog, оставляя их имена по умолчанию — OpenDialog1 и SaveDialog1. Поскольку после чтения файла вам надо запомнить его имя, чтобы знать под каким именем потом его сохранять, вы можете определить для этого имени переменную, назвав ее, например, FName. Для этого в заголовочном файле .h модуля в классе формы в разделе private объявляете эту переменную:
Тогда обработка команды Открыть может сводиться к следующему оператору:
Этот оператор вызывает диалог, проверяет, выбрал ли пользователь файл (если выбрал, то функция Execute возвращает true), после чего имя выбранного файла (OpenDialog1->FileName) сохраняется в переменной FName и файл загружается в текст RichEdit1 методом LoadFromFile.
Обработка команды Сохранить выполняется оператором
В данном случае нет необходимости обращаться к какому-то диалогу, поскольку имя файла известно: оно хранится в переменной FName.
Обработка команды Сохранить как... выполняется операторами:
Первый из этих операторов присваивает свойству FileName компонента SaveDialog1 запомненное имя файла. Это имя по умолчанию будет, предложено пользователю при открытии диалога Сохранить как.... Следующий оператор открывает диалог и, если пользователь выбрал в нем файл, запоминает новое имя файла и сохраняет в файле с этим именем текст компонента RichEdit1.
Свойства компонентов OpenPictureDialog и SavePictureDialog ничем не отличаются от свойств компонентов OpenDialog и SaveDialog. Единственное отличие — заданное значение по умолчанию свойства Filter в OpenPictureDialog и SavePictureDialog. В этих компонентах заданы следующие фильтры:
Компонент FontDialog вызывает диалоговое окно выбора атрибутов шрифта, представленное на рис. 3.43. В нем пользователь может выбрать имя шрифта, его стиль (начертание), размер и другие атрибуты.
Основное свойство компонента — Font типа TFont (см. раздел 4.1.4), в котором вы можете задать при желании начальные установки атрибутов шрифта и в котором вы можете прочитать значения атрибутов, выбранные пользователем в процессе диалога.
Свойства MaxFontSize и MinFontSize устанавливают ограничения на максимальный и минимальный размеры шрифта. Если значения этих свойств равны 0 (по умолчанию), то никакие ограничения на размер не накладываются. Если же значения свойств заданы (обычно это целесообразно делать исходя из размеров компонента приложения, для которого выбирается шрифт), то в списке Размер диалогового окна (см. рис. 3.43) появляются только размеры, укладывающиеся в заданный диапазон. При попытке пользователя задать недопустимый размер ему будет выдано предупреждение вида «Размер должен лежать в интервале» и выбор пользователя отменится. Свойства MaxFontSize и MinFontSize действуют только при включенной опции fdLimitSize (см. ниже).
Свойство Device определяет, из какого списка возможных шрифтов будет предложен выбор в диалоговом окне: fdScreen — из списка экрана (по умолчанию), fdPrinter — из списка принтера, fdBoth — из обоих.
Свойство Options содержит множество опций:
По умолчанию все эти опции кроме fdEffects, отключены.
Если установить опцию fdApplyButton, то при нажатии пользователем кнопки Применить возникает событие OnApply, в обработчике которого вы можете написать код, который применит выбранные пользователем атрибуты, не закрывая диалогового окна.
Компонент ColorDialog вызывает диалоговое окно выбора цвета, представленное на рис. 3.44. В нем пользователь может выбрать цвет из базовой палитры или, нажав кнопку Определить цвет раскрыть дополнительную панель (на рис. 3.44 она раскрыта), позволяющую синтезировать цвет, отличный от базовых. Синтезированный цвет можно добавить кнопкой Добавить в набор в палитру дополнительных цветов на левой панели и использовать его в дальнейшем.
Основное свойство компонента ColorDialog — Color. Это свойство соответствует тому цвету, который выбрал в диалоге пользователь. Если при вызове диалога желательно установить некоторое начальное приближение цвета, это можно сделать, установив Color предварительно во время проектирования или программно.
Свойство CustomColors типа TStrings позволяет задать заказные цвета дополнительной палитры. Каждый цвет определяется строкой вида
Имена цветов задаются от ColorA (первый цвет) до ColorP (шестнадцатый, последний). Например, строка
задает первый заказной цвет. Подробнее о задании цветов см. в справочной части книги в главе 15. Свойство Options содержит множество следующих опций:
По умолчанию все опции выключены.
3.6.6 Диалоги печати и установки принтера — компоненты PrintDialog и PrinterSetupDialog
Компонент PrintDialog вызывает диалоговое окно печати, представленное на рис. 3.45. В нем пользователь может выбрать принтер и установить его свойства, указать число копий и последовательность их печати, печатать в файл или непосредственно на принтер, выбрать печатаемые страницы или печатать только выделенный фрагмент.
Диалоговое окно настройки печати
Компонент PrintDialog не осуществляет печать. Он только позволяет пользователю задать атрибуты печати. А сама печать должна осуществляться программно с помощью объекта Printer или иным путем. О способах печати см. раздел 4.8.
Рассмотренные ранее диалоговые компоненты возвращали одно свойство — имя файла, цвет или один объект — Font, содержащий множество свойств. В отличие от них компонент PrintDialog возвращает ряд свойств, характеризующих выбранные пользователем установки. Это следующие свойства:
Перед вызовом диалога желательно определить, сколько страниц в печатаемом тексте и задать параметры MaxPage и MinPage — максимальный и минимальный номера страниц. В противном случае пользователю в диалоговом окне не будет доступна кнопка Страницы с... по.... Кроме того следует определить множество опций в свойстве Options:
Теперь остановимся на компоненте PrinterSetupDialog, вызывающем диалоговое окно установки принтера, представленное на рис. 3.46. Это единственный диалоговый компонент, не имеющий никаких специфических свойств, которые надо было бы устанавливать или читать. Диалог выполняет операции по установке принтера, на котором будет производиться печать, и задании его свойств. Этот диалог не возвращает никаких параметров.
3.6.7 Диалоги поиска и замены текста — компоненты FindDialog и ReplaceDialog
Компоненты FindDialog и ReplaceDialog, вызывающие диалоги поиска и замены фрагментов текста (рис. 3.47 и 3.48), очень похожи и имеют одинаковые свойства, кроме одного, задающего заменяющий текст в компоненте ReplaceDialog. Такое сходство не удивительно, поскольку ReplaceDialog — производный класс от FindDialog.
Диалоговое окно замены фрагмента текста
Компоненты имеют следующие основные свойства:
Последний параметр Options — может содержать следующие свойства:
Сами по себе компоненты FindDialog и ReplaceDialog не осуществляют ни поиска, ни замены. Они только обеспечивают интерфейс с пользователем. А поиск и замену надо осуществлять программно. Для этого можно пользоваться событием OnFind, происходящим, когда пользователь нажал в диалоге кнопку Найти далее, и событием OnReplace, возникающим, если пользователь нажал кнопку Заменить или Заменить все. В событии OnReplace можно узнать, какую именно кнопку нажал пользователь, по значениям флагов frReplace и frReplaceAll.
Поиск заданного фрагмента в компоненте RichEdit легко, проводить, используя его метод FindText, объявленный следующим образом:
enum TSearchType { stWholeWord, stMatchCase );
typedef Set<TSearchType,stWholeWord,stMatchCase> TSearchTypes;
int __fastcall FindText(const System::AnsiString SearchStr, int StartPos, int Length, TSearchTypes Options);
Этот метод ищет в тексте RichEdit фрагмент, заданный параметром SearchStr. Поиск идет начиная с позиции StartPos (позиция первого символа текста считается нулевой) на протяжении Length символов. Параметр является множеством, которое может содержать элементы stWholeWord (поиск только целого слова) и stMatchCase (поиск с учетом регистра). Метод возвращает позицию найденного вхождения. Если заданный фрагмент не найден, возвращается –1.
Ниже приведен код, осуществляющий поиск заданного фрагмента в тексте компонента RichEdit1.
Функция MFindClick задает в качестве начального значения для поиска текст, выделенный в RichEdit1, и затем вызывает диалог поиска FindDialog1. Функция FindDialog1Find является обработчиком события OnFind компонента FindDialog1. Она срабатывает, когда пользователь нажал в диалоге кнопку Найти далее. Комментарии в тексте этой функции поясняют этапы поиска. Сначала производится установка области текста (переменные StartPos и ToEnd), в которой проводится поиск. Затем устанавливаются атрибуты поиска — формируется множество Option в зависимости от установленных пользователем опций. Затем методом FindText проводится сам поиск. Если нового вхождения искомого текста не найдено (метод FindText вернул –1), то пользователю выдается сообщение об этом с помощью функции ShowMessage.
Приведенный пример относился к поиску в компоненте RichEdit. Для организации поиска в тексте компонента Memo удобно использовать метод Pos класса AnsiString, который, объявлен следующим образом:
Метод возвращает индекс первого символа первого вхождения подстроки subStr в строку, к которой применяется этот метод. Индексы начинаются с 1. Если subStr не содержится в строке, то возвращается 0.
Для организации поиска потребуются еще две функции класса AnsiString: SubString и LowerCase. Первая из них определена как:
Она возвращает подстроку, начинающуюся с символа в позиции index и содержащую count символов.
Функция LowerCase, определенная как
возвращает строку символов S, переведенную в нижний регистр.
Теперь мы можем рассмотреть пример организации поиска. Пусть в вашем приложении имеется компонент Memo1 и при выборе раздела меню MFind вы хотите организовать поиск в тексте, содержащемся в Memo1. Для упрощения задачи исключим опцию поиска только целых слов и опцию поиска вверх от положения курсора.
Программа, реализующая поиск, может иметь следующий вид:
Программа аналогична приведенной ранее для компонента RichEdit и отличается только несколькими операторами, осуществляющими непосредственно поиск.
При реализации команды Заменить приведенные выше процедуры можно оставить теми же самыми, заменив в них FindDialog1 на ReplaceDialog1. Дополнительно можно написать процедуру обработки события OnReplace компонента ReplaceDialog1. Кроме того желательно обеспечить, чтобы при нажатии пользователем в диалоге клавиши Заменить все программа просматривала бы весь текст и проводила все замены без дополнительных вопросов пользователю. Для этого можно в конце обработчика события OnFind вставить оператор, который в случае, если пользователь нажал в диалоге клавишу Заменить все (см. рис. 3.48), вызывал бы обработчик события OnReplace. В итоге текст, обеспечивающий замену в компоненте RichEdit, может иметь вид:
В функции ReplaceDialog1Find в конце поиска очередного вхождения искомого фрагмента в текст проверяется нажатие пользователем кнопки Заменить все. Если она нажата, то происходит обращение к функции ReplaceDialog1Replace, в которой осуществляется замена текста, после чего сразу автоматически опять вызывается функция ReplaceDialog1Find. Таким образом без остановок просматриваются и заменяются все вхождения искомого фрагмента в текст. Если же кнопка Заменить все не нажата, то программа останавливается и ждет, пока пользователь нажмет в диалоге (см. рис. 3.46) кнопку Найти далее или Заменить. Бели нажимается кнопка Найти далее, то производится следующий вызов ReplaceDialog1Find. А при нажатии кнопки Заменить вызывается функция ReplaceDialog1Replace, которая заменяет выделенный текст.
Печать форм методом Print
Формы в C++ Builder имеют метод Print, который печатает клиентскую область формы. При этом полоса заголовка формы и полоса главного меню не печатается. Таким образом, можно включить в приложение форму, в которой пользователь во время выполнения размещает необходимые для печати результаты. Если имя этой формы Form2, то ее печать может выполняться оператором
Свойство формы PrintScale определяет опции масштабирования изображения при печати. Возможные значения PrintScale:
4.8.1.2 Печать методом Print текстов в обогащенном формате
Компонент RichEdit имеет метод Print, позволяющий печатать текст, хранящийся в компоненте. В этот метод передается единственный параметр типа строки, назначение которого заключается только в том, что при просмотре в Windows очереди печатаемых заданий принтера эта строка появляется как имя задания. Например, оператор
обеспечивает печать текста компонента RichEdit1, причем задание на печать получает имя "Printing of RichEdit1".
Печать воспроизводит все заданные особенности форматирования. Перенос строк и разбиение тек ста на страницы производится автоматически. Длина строк никак не связана с размерами компонента RichEdit, содержащего этот текст.
Печатью через RichEdit можно воспользоваться и для печати файлов документов в текстовом формате или в формате RTF. Для этого надо последовательно выполнить оператор загрузки файла в компонент и оператор печати загруженного текста. Например:
или
4.8.1.3 Печать файлов средствами стандартных приложений Windows с помощью функции ShellExecute
Для печати файлов средствами стандартных приложений Windows можно использовать функцию ShellExecute. Подробно об этой функции см. раздел 6.1.4. А здесь мы коротко рассмотрим технологию такой печати без каких-либо дополнительных пояснений.
Чтобы воспользоваться функцией ShellExecute, надо ввести в модуль директиву препроцессора
которая подключает заголовочный файл ShellApi.h, содержащий объявление функции ShellExecute и некоторых других функций Windows API. Функция ShellExecute при соответствующем задании ее параметров ищет по расширению заданного для печати файла соответствующую ему системную программу Windows, и, если находит, то осуществляет печать. Например, обычно Windows настроен так, что файлам с расширением .txt соответствует программа Notepad, а файлам с расширением .doc — Word. В этом случае выполнение оператора
вызовет печать файла с именем test.txt средствами программы Notepad, а оператор
вызовет печать файла с именем test.doc средствами программы Word.
Этот способ печати можно использовать как для распечатки заранее созданных файлов, так и для распечатки файлов, созданных во время выполнения приложения методами SaveToFile, имеющимися у многих компонентов.
4.8.2 Печать с помощью объекта Printer
В C++ Builder имеется класс печатающих объектов TPrinter, который обеспечивает печать текстов, изображений и других объектов, расположенных на его канве — Canvas. Свойства канвы подробно рассмотрены в разделе 5.1.3 и здесь мы не будем на них останавливаться. Достаточно знать, что на канве могут размещаться различные изображения и текст.
Класс объектов TPrinter объявлен в модуле Printers. Поэтому для работы с этим классом надо включить в текст директиву препроцессора
#include <Printers.hpp>
Рассмотрим некоторые свойства и методы объекта типа TPrinter.
Предположим, вы хотите напечатать текст и изображение, используя печатающий объект. Изображение размещено на форме в компоненте Image1. Вы можете осуществить эту печать следующим кодом:
Первый оператор этого кода использует функцию Printer, которая создает глобальный объект типа TPrinter. В том же операторе создается указатель на этот объект Prntr.
Следующий оператор задает размер шрифта канвы принтера. Затем функция BeginDoc запускает задание на печать. Следующий оператор посылает на канву принтера с помощью метода канвы TextOut, начиная с точки с координатами (10, 10), текст «Я печатаю через объект Printer». Следующий оператор методом Draw рисует на канве принтера изображение. При этом изображение выравнивается по горизонтали на середину страницы. Координата верхней стороны изображения задается равной 40.
В заключение метод EndDoc вызывает печать текста и изображения и останавливает задание на печать.
44. иведите синтаксис объявления одномерного, двумерного и ступенчатого массивов в C#. Перечислите основные свойства и методы стандартного класса Array. Поясните принцип работы со ступенчатым массивом и область его применения. Опишите принцип работы оператора foreach
Пример объявления массива:
Int [] A = new int [9];
Класс Array
Синтаксис:
[SerializableAttribute]
[ComVisibleAttribute(true)]
public abstract class Array : ICloneable,
IList, ICollection, IEnumerable, IStructuralComparable, IStructuralEquatable
Свойства:
IsFixedSize Получает значение, показывающее, имеет ли список Array фиксированный размер.
IsReadOnly Получает значение, указывающее, доступен ли объект Array только для чтения.
IsSynchronized Получает значение, показывающее, является ли доступ к коллекции Array синхронизированным (потокобезопасным).
Length Получает 32-разрядное целое число, представляющее общее число элементов во всех измерениях массива Array.
LongLength Получает 64-разрядное целое число, представляющее общее число элементов во всех измерениях массива Array.
Rank Получает ранг (размерность) объекта Array.
SyncRoot Получает объект, который может использоваться для синхронизации доступа к объекту Array.
Методы:
AsReadOnly<T> Возвращает для заданного массива доступную только для чтения программу-оболочку.
BinarySearch(Array, Object) Выполняет поиск заданного элемента во всем отсортированном одномерном массиве Array, используя для этого интерфейс IComparable, реализуемый каждым элементом массива Array и заданным объектом.
BinarySearch(Array, Object, IComparer) Выполняет поиск значения во всем отсортированном одномерном массиве Array, используя заданный интерфейс IComparer.
BinarySearch(Array, Int32, Int32, Object) Выполняет поиск значения в диапазоне элементов отсортированного одномерного массива Array, используя для этого интерфейс IComparable, реализуемый каждым элементом массива Array и заданным значением.
BinarySearch(Array, Int32, Int32, Object, IComparer) Выполняет поиск значения в диапазоне элементов отсортированного одномерного массива Array, используя заданный интерфейс IComparer.
BinarySearch<T>(T[], T) Выполняет поиск заданного элемента во всем отсортированном одномерном массиве Array, используя для этого универсальный интерфейс IComparable<T>, реализуемый каждым элементом массива Array и заданным объектом.
BinarySearch<T>(T[], T, IComparer<T>) Выполняет поиск значения во всем отсортированном одномерном массиве Array, используя заданный универсальный интерфейс IComparer<T>.
BinarySearch<T>(T[], Int32, Int32, T) Выполняет поиск значения в диапазоне элементов отсортированного одномерного массива Array, используя для этого универсальный интерфейс IComparable<T>, реализуемый каждым элементом массива Array и заданным значением.
BinarySearch<T>(T[], Int32, Int32, T, IComparer<T>) Выполняет поиск значения в диапазоне элементов отсортированного одномерного массива Array, используя заданный универсальный интерфейс IComparer<T>.
Clear Задает диапазон элементов массива Array равным нулю, false или null в зависимости от типа элемента.
Clone Создает неполную копию массива Array.
ConstrainedCopy Копирует диапазон элементов из массива Array, начиная с заданного индекса источника, и вставляет его в другой массив Array, начиная с заданного индекса назначения. Гарантирует, что в случае невозможности успешно скопировать весь диапазон, все изменения будут отменены.
ConvertAll<TInput, TOutput> Преобразует массив одного типа в массив другого типа.
Copy(Array, Array, Int32) Копирует диапазон элементов из массива Array, начиная с первого элемента, и вставляет его в другой массив Array, также начиная с первого элемента. Длина задается как 32-разрядное целое число.
Copy(Array, Array, Int64) Копирует диапазон элементов из массива Array, начиная с первого элемента, и вставляет его в другой массив Array, также начиная с первого элемента. Длина задается как 64-разрядное целое число.
Copy(Array, Int32, Array, Int32, Int32) Копирует диапазон элементов из массива Array, начиная с заданного индекса источника, и вставляет его в другой массив Array, начиная с заданного индекса назначения. Длина и индексы задаются как 32-разрядные целые числа.
Copy(Array, Int64, Array, Int64, Int64) Копирует диапазон элементов из массива Array, начиная с заданного индекса источника, и вставляет его в другой массив Array, начиная с заданного индекса назначения. Длина и индексы задаются как 64-разрядные целые числа.
CopyTo(Array, Int32) Копирует все элементы текущего одномерного массива Array в заданный одномерный массив Array, начиная с указанного индекса в массиве назначения Array. Индекс задается как 32-разрядное целое число.
CopyTo(Array, Int64) Копирует все элементы текущего одномерного массива Array в заданный одномерный массив Array, начиная с указанного индекса в массиве назначения Array. Индекс задается как 64-разрядное целое число.
CreateInstance(Type, Int32) Создает одномерный массив Array заданного типа Type и длины, индексация которого начинается с нуля.
CreateInstance(Type, Int32[]) Создает многомерный массив Array заданного типа Type с заданными длинами по измерениям и индексацией, начинающейся с нуля. Длины по измерениям задаются в массиве 32-разрядных целых чисел.
CreateInstance(Type, Int64[]) Создает многомерный массив Array заданного типа Type с заданными длинами по измерениям и индексацией, начинающейся с нуля. Длины по измерениям задаются в массиве 64-разрядных целых чисел.
CreateInstance(Type, Int32, Int32) Создает двумерный массив Array заданного типа Type с заданными длинами по измерениям и индексацией, начинающейся с нуля.
CreateInstance(Type, Int32[], Int32[]) Создает многомерный массив Array заданного типа Type с заданными длинами по измерениям и нижними границами.
CreateInstance(Type, Int32, Int32, Int32) Создает трехмерный массив Array заданного типа Type с заданными длинами по измерениям и индексацией, начинающейся с нуля.
Equals(Object) Определяет, равен ли заданный объект Object текущему объекту Object. (Унаследовано от Object.)
Exists<T> Определяет, содержит ли заданный массив элементы, удовлетворяющие условиям указанного предиката.
Finalize Позволяет объекту попытаться освободить ресурсы и выполнить другие операции очистки, перед тем как объект будет утилизирован в процессе сборка мусора. (Унаследовано от Object.)
Find<T> Выполняет поиск элемента, удовлетворяющего условиям указанного предиката, и возвращает первое найденное вхождение в пределах всего списка Array.
FindAll<T> Извлекает все элементы, удовлетворяющие условиям указанного предиката.
FindIndex<T>(T[], Predicate<T>) Выполняет поиск элемента, удовлетворяющего условиям указанного предиката, и возвращает отсчитываемый от нуля индекс первого найденного вхождения в пределах всего списка Array.
FindIndex<T>(T[], Int32, Predicate<T>) Выполняет поиск элемента, удовлетворяющего условиям указанного предиката, и возвращает отсчитываемый от нуля индекс первого вхождения в диапазоне элементов списка Array, начиная с заданного индекса и заканчивая последним элементом.
FindIndex<T>(T[], Int32, Int32, Predicate<T>) Выполняет поиск элемента, удовлетворяющего условиям указанного предиката, и возвращает отсчитываемый от нуля индекс первого вхождения в диапазоне элементов списка Array, начинающемся с заданного индекса и содержащем указанное число элементов.
FindLast<T> Выполняет поиск элемента, удовлетворяющего условиям указанного предиката, и возвращает последнее найденное вхождение в пределах всего списка Array.
FindLastIndex<T>(T[], Predicate<T>) Выполняет поиск элемента, удовлетворяющего условиям указанного предиката, и возвращает отсчитываемый от нуля индекс последнего найденного вхождения в пределах всего списка Array.
FindLastIndex<T>(T[], Int32, Predicate<T>) Выполняет поиск элемента, удовлетворяющего условиям указанного предиката, и возвращает отсчитываемый от нуля индекс последнего вхождения в диапазоне элементов списка Array, начиная с первого элемента и заканчивая элементом с заданным индексом.
FindLastIndex<T>(T[], Int32, Int32, Predicate<T>) Выполняет поиск элемента, удовлетворяющего условиям указанного предиката, и возвращает отсчитываемый от нуля индекс последнего вхождения в диапазоне элементов списка Array, содержащем указанное число элементов и заканчивающемся элементом с заданным индексом.
ForEach<T> Выполняет указанное действие с каждым элементом указанного массива.
GetEnumerator Возвращает объект IEnumerator для массива Array.
GetHashCode Играет роль хэш-функции для определенного типа. (Унаследовано от Object.)
GetLength Получает 32-разрядное целое число, представляющее количество элементов в заданном измерении массива Array.
GetLongLength Получает 64-разрядное целое число, представляющее количество элементов в заданном измерении массива Array.
GetLowerBound Получает нижнюю границу заданного измерения массива Array.
GetType Возвращает объект Type для текущего экземпляра. (Унаследовано от Object.)
GetUpperBound Получает верхнюю границу заданного измерения массива Array.
GetValue(Int32) Получает значение, хранящееся в указанной позиции одномерного массива Array. Индекс задается как 32-разрядное целое число.
GetValue(Int32[]) Получает значение, хранящееся в указанной позиции многомерного массива Array. Индексы задаются как массив 32-разрядных целых чисел.
GetValue(Int64) Получает значение, хранящееся в указанной позиции одномерного массива Array. Индекс задается как 64-разрядное целое число.
GetValue(Int64[]) Получает значение, хранящееся в указанной позиции многомерного массива Array. Индексы задаются как массив 64-разрядных целых чисел.
GetValue(Int32, Int32) Получает значение в заданной позиции двухмерного массива Array. Индексы задаются в виде 32-разрядных целых чисел.
GetValue(Int64, Int64) Получает значение в заданной позиции двухмерного массива Array. Индексы задаются в виде 64-разрядных целых чисел.
GetValue(Int32, Int32, Int32) Получает значение, хранящееся в указанной позиции трехмерного массива Array. Индексы задаются в виде 32-разрядных целых чисел.
GetValue(Int64, Int64, Int64) Получает значение, хранящееся в указанной позиции трехмерного массива Array. Индексы задаются в виде 64-разрядных целых чисел.
IndexOf(Array, Object) Выполняет поиск заданного объекта внутри всего одномерного массива Array и возвращает индекс его первого вхождения.
IndexOf(Array, Object, Int32) Выполняет поиск указанного объекта и возвращает индекс первого вхождения в диапазоне элементов одномерного массива Array, начинающемся с элемента с заданным индексом и заканчивающемся последним элементом.
IndexOf(Array, Object, Int32, Int32) Выполняет поиск указанного объекта и возвращает индекс первого вхождения в диапазоне элементов одномерного массива Array, начинающемся с элемента с заданным индексом и содержащем указанное число элементов.
IndexOf<T>(T[], T) Выполняет поиск указанного объекта и возвращает индекс первого вхождения во всем массиве Array.
IndexOf<T>(T[], T, Int32) Выполняет поиск указанного объекта и возвращает индекс первого вхождения в диапазоне элементов массива Array, начиная с элемента с заданным индексом и заканчивая последним элементом.
IndexOf<T>(T[], T, Int32, Int32) Выполняет поиск указанного объекта и возвращает индекс первого вхождения в диапазоне элементов массива Array, начинающемся с элемента с заданным индексом и содержащем указанное число элементов.
Initialize Инициализирует каждый элемент массива Array типа значения путем вызова конструктора по умолчанию для типа значений.
LastIndexOf(Array, Object) Выполняет поиск заданного объекта и возвращает индекс его последнего вхождения внутри всего одномерного массива Array.
LastIndexOf(Array, Object, Int32) Выполняет поиск указанного объекта и возвращает индекс его последнего вхождения в диапазоне элементов одномерного массива Array, начинающемся с первого элемента и заканчивающемся элементом с заданным индексом.
LastIndexOf(Array, Object, Int32, Int32) Выполняет поиск указанного объекта и возвращает индекс последнего вхождения в диапазоне элементов одномерного массива Array, содержащем указанное число элементов и заканчивающемся элементом с заданным индексом.
LastIndexOf<T>(T[], T) Выполняет поиск указанного объекта и возвращает индекс последнего вхождения во всем массиве Array.
LastIndexOf<T>(T[], T, Int32) Выполняет поиск указанного объекта и возвращает индекс последнего вхождения в диапазоне элементов массива Array, начиная с первого элемента и заканчивая элементом с заданным индексом.
LastIndexOf<T>(T[], T, Int32, Int32) Выполняет поиск указанного объекта и возвращает индекс последнего вхождения в диапазоне элементов массива Array, содержащем указанное число элементов и заканчивающемся в позиции с указанным индексом.
MemberwiseClone Создает неполную копию текущего объекта Object. (Унаследовано от Object.)
Resize<T> Изменяет количество элементов в массиве до указанной величины.
Reverse(Array) Изменяет порядок элементов во всем одномерном массиве Array на обратный.
Reverse(Array, Int32, Int32) Изменяет последовательность элементов в диапазоне элементов одномерного массива Array на обратную.
SetValue(Object, Int32) Присваивает значение элементу, находящемуся в указанной позиции одномерного массива Array. Индекс задается как 32-разрядное целое число.
SetValue(Object, Int32[]) Присваивает значение элементу, находящемуся в указанной позиции многомерного массива Array. Индексы задаются как массив 32-разрядных целых чисел.
SetValue(Object, Int64) Присваивает значение элементу, находящемуся в указанной позиции одномерного массива Array. Индекс задается как 64-разрядное целое число.
SetValue(Object, Int64[]) Присваивает значение элементу, находящемуся в указанной позиции многомерного массива Array. Индексы задаются как массив 64-разрядных целых чисел.
SetValue(Object, Int32, Int32) Присваивает значение элементу, находящемуся в указанной позиции двухмерного массива Array. Индексы задаются в виде 32-разрядных целых чисел.
SetValue(Object, Int64, Int64) Присваивает значение элементу, находящемуся в указанной позиции двухмерного массива Array. Индексы задаются в виде 64-разрядных целых чисел.
SetValue(Object, Int32, Int32, Int32) Присваивает значение элементу, находящемуся в указанной позиции трехмерного массива Array. Индексы задаются в виде 32-разрядных целых чисел.
SetValue(Object, Int64, Int64, Int64) Присваивает значение элементу, находящемуся в указанной позиции трехмерного массива Array. Индексы задаются в виде 64-разрядных целых чисел.
Sort(Array) Сортирует элементы во всем одномерном массиве Array, используя реализацию интерфейса IComparable каждого элемента массива Array.
Sort(Array, Array) Сортирует пару одномерных объектов Array (один содержит ключи, а другой — соответствующие элементы) по ключам в первом массиве Array, используя реализацию интерфейса IComparable каждого ключа.
Sort(Array, IComparer) Сортирует элементы в одномерном массиве Array, используя заданный интерфейс IComparer.
Sort(Array, Array, IComparer) Сортирует пару одномерных объектов Array (один содержит ключи, а другой — соответствующие элементы) по ключам в первом массиве Array, используя заданный интерфейс IComparer.
Sort(Array, Int32, Int32) Сортирует элементы в диапазоне элементов одномерного массива Array с помощью реализации интерфейса IComparable каждого элемента массива Array.
Sort(Array, Array, Int32, Int32) Сортирует диапазон элементов в паре одномерных объектов Array (один содержит ключи, а другой — соответствующие элементы) по ключам в первом массиве Array, используя реализацию интерфейса IComparable каждого ключа.
Sort(Array, Int32, Int32, IComparer) Сортирует элементы в диапазоне элементов одномерного массива Array, используя заданный интерфейс IComparer.
Sort(Array, Array, Int32, Int32, IComparer) Сортирует диапазон элементов в паре одномерных объектов Array (один содержит ключи, а другой — соответствующие элементы) по ключам в первом массиве Array, используя заданный интерфейс IComparer.
Sort<T>(T[]) Сортирует элементы во всем массиве Array, используя реализацию универсального интерфейса IComparable<T> каждого элемента массива Array.
Sort<T>(T[], IComparer<T>) Сортирует элементы в одномерном массиве Array, используя заданный универсальный интерфейс IComparer<T>.
Sort<T>(T[], Comparison<T>) Сортирует элементы массива Array с использованием указанного объекта Comparison<T>.
Sort<T>(T[], Int32, Int32) Сортирует элементы в диапазоне элементов массива Array, используя реализацию универсального интерфейса IComparable<T> каждого элемента массива Array.
Sort<T>(T[], Int32, Int32, IComparer<T>) Сортирует элементы в диапазоне элементов массива Array, используя заданный универсальный интерфейс IComparer<T>.
Sort<TKey, TValue>(TKey[], TValue[]) Сортирует пару одномерных объектов Array (один содержит ключи, а другой — соответствующие элементы) по ключам в первом массиве Array, используя реализацию универсального интерфейса IComparable<T> каждого ключа.
Sort<TKey, TValue>(TKey[], TValue[], IComparer<TKey>) Сортирует пару одномерных объектов Array (один содержит ключи, а другой — соответствующие элементы) по ключам в первом массиве Array, используя заданный универсальный интерфейс IComparer<T>.
Sort<TKey, TValue>(TKey[], TValue[], Int32, Int32) Сортирует диапазон элементов в паре объектов Array (один содержит ключи, а другой — соответствующие элементы) по ключам в первом массиве Array, используя реализацию универсального интерфейса IComparable<T> каждого ключа.
Sort<TKey, TValue>(TKey[], TValue[], Int32, Int32, IComparer<TKey>) Сортирует диапазон элементов в паре объектов Array (один содержит ключи, а другой — соответствующие элементы) по ключам в первом массиве Array, используя заданный универсальный интерфейс IComparer<T>.
ToString Возвращение строки, представляющей текущий объект. (Унаследовано от Object.)
TrueForAll<T> Определяет, все ли элементы массива удовлетворяют условиям указанного предиката.
foreach(тип идентификатор in массив) оператор
Цикл работает в полном соответствии со своим названием – тело цикла выполняется для каждого элемента в контейнере. Тип идентификатора должен быть согласован с типом элементов, хранящихся в массиве данных. Предполагается также, что элементы массива упорядочены. На каждом шаге цикла идентификатор, задающий текущий элемент массива, получает значение очередного элемента в соответствии с порядком, установленным на элементах массива. С этим текущим элементом и выполняется тело цикла - выполняется столько раз, сколько элементов находится в массиве. Цикл заканчивается, когда полностью перебраны все элементы массива.
Ступенчатые массивы
Двумерный массив можно представить в виде таблицы, в которой длина каждой строки остается неизменной по всему массиву. Но в С# можно также создавать специальный тип двумерного массива, называемый ступенчатым массивом. Ступенчатый массив представляет собой массив массивов, в котором длина каждого массива может быть разной. Следовательно, ступенчатый массив может быть использован для составления таблицы из строк разной длины.
Ступенчатые массивы объявляются с помощью ряда квадратных скобок, в которых указывается их размерность. Например, для объявления двумерного ступенчатого массива служит следующая общая форма:
тип [][] имя массива = new тип[размер] [];
где размер обозначает число строк в массиве. Память для самих строк распределяется индивидуально, и поэтому длина строк может быть разной.