- Работа со списками
- Работа с объектом типа Memo
- Классический список ListBox в системе Visual Basic
- Классический список ListBox в системах BCB и Delphi
- Компактный список ComboBox в системе Visual Basic
- Компактный список ComboBox в системах BCB и Delphi
- Списки DriveListBox, DirListBox и FileListBox в среде VB
- Списки DriveComboBox, DirectoryListBox и FileListBox в системах BCB/Delphi
- Присоединение объектов к строкам списка ListBox
- Сортировка грибов
- Просмотр системных шрифтов
Сортировка грибов
Опубликовано admin в Чт, 02/04/2010 - 22:57
Приложение 4_12 (Delphi).
Разместим на форме два универсальных списка и заполним первый из них названиями грибов. Для этого достаточно дважды щелкнуть по строке Items в Инспекторе Объектов (рис. 4.12). После набора строк в поле редактора и щелчка по кнопке <OK> набранный текст окажется в окне объекта ListBox1.

Рис. 4.12. Набор строк списка в редакторе Delphi-6.0
Второй список ListBox2 предназначается для копирования в него строк из первого списка по нажатию кнопки <Копировать> и их упорядочения в алфавитном порядке по нажатию кнопки <Сортировать>.
Еще две кнопки с заголовками <Левый на диск> и <Правый на диск> предназначены для сохранения содержимого каждого списка в дисковых файлах с именами "Грибы1.txt" и "Грибы2.txt". Ниже приведены тексты Delphi-процедур обработки щелчков по каждой из перечисленных кнопок. На рис. 4.13 отображен экран приложения после его загрузки в память, на рис. 4.14 — после выполнения процедуры переписи, на рис.4.15 — после выполнения процедуры сортировки. Завершив работу приложения, вы обнаружите в текущем каталоге тестовые файлы с содержимым каждого окна.
procedure TForm1.Button1Click(Sender: TObject);
begin {Щелчок по кнопке «Переписать»}
ListBox2.Items:=ListBox1.Items;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin {Щелчок по кнопке «Сортировать»}
ListBox2.Sorted:=True;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin {Щелчок по кнопке «Левый на диск»}
ListBox1.Items.SaveToFile('Грибы1.txt');
end;
procedure TForm1.Button4Click(Sender: TObject);
begin {Щелчок по кнопке «Правый на диск»}
ListBox2.Items.SaveToFile('Грибы2.txt')
end;

Рис. 4.13. Главная форма в момент старта приложения

Рис. 4.14. Главная форма после копирования списка

Рис. 4.15. Главная форма после сортировки списка
Отметим деталь, которая может оказаться полезной. Если после упорядочения списка отменить режим сортировки (LisBox1.Sorted:=False;), то первоначальное содержимое списка не восстановится. Список останется упорядоченным, но вся последующая работа с ним будет продолжаться как над несортированным списком.
Приложение 4_13 (VB).
Приложение «Сортировка грибов» в среде Visual Basic имеет некоторые отличия от только что приведенного варианта. Набор содержимого списка производится в окне Properties после щелчка по значению поля Items. Завершая набор очередной строки надо нажимать комбинацию <Ctrl>+<Enter>. Нажатие клавиши <Enter> завершает процедуру набора списка.
Во-вторых, VB не позволяет скопировать список целиком, используя единственный оператор присваивания. Поэтому приходится копировать по одной строке, извлекая их из исходного списка и добавляя в List2 с помощью метода AddItem. Для организации цикла по всем строкам первого списка используется свойство ListIndex, хранящее количество строк в списке.
В-третьих, свойство Sorted доступно во время выполнения программы только на чтение, и изменить его нельзя. Поэтому перенос строк пришлось совместить с сортировкой, и в методе AddItem не указывать индекс строки-получателя в списке List2.
Наконец, в среде Visual Basic отсутствует метод, позволяющий за одно обращение сохранить список в файле. Поэтому файл приходится открывать и производить в него запись строк в цикле. Дополнительное неудобство вызывает необходимость задания пути к файлу, иначе этот файл окажется в каталоге VB98.
Private Sub Command1_Click()
For i = 0 To List1.ListCount - 1
List2.AddItem List1.List(i)
Next i
End Sub
Private Sub Command2_Click()
Open "e:\\Грибы1.txt" For Output As #1
For i = 0 To List1.ListCount - 1
Print #1, List1.List(i)
Next i
Close #1
End Sub
Private Sub Command3_Click()
Open "e:\\Грибы2.txt" For Output As #1
For i = 0 To List2.ListCount - 1
Print #1, List2.List(i)
Next i
Close #1
End Sub
