☰ Содержание · Информатика

ListBox, ComboBox и SpinEdit

Уроки 55–56 · 2 урока · Н. И. Тайлаков (общий редактор), А. Б. Ахмедов, М. Д. Пардаева, А. А. Абдуганиев, У. М. Мирсанов. Информатика и информационные технологии, 10 класс, 1-е издание. «Extremum-Press», Ташкент, 2017
55

Объекты ListBox и ComboBox

Учебник: с. 121–126
ЦельИспользует объекты ListBox, ComboBox и SpinEdit, заполняет список с помощью Items.Add, получает выбранный элемент с помощью ItemIndex и Items[i] и задаёт свойства Value, MinValue и MaxValue компонента SpinEdit.
Новые слова
ListBox: поле, показывающее список элементов, из которых можно выбрать один или несколько · ListBoxComboBox: поле ввода с раскрывающимся списком · ComboBoxSpinEdit: поле ввода целых чисел со стрелками вверх и вниз · SpinEditItems.Add: метод, добавляющий новую строку в конец списка · Items.Add
Объяснение

Если у RadioGroup много вариантов, она занимает много места на экране. ListBox (вкладка Standard) показывает длинный список и добавляет полосу прокрутки, если список не помещается; ComboBox занимает мало места, как Edit: при нажатии треугольника справа открывается скрытый список. В обоих элементы хранятся в свойстве Items, номер выбранного элемента находится в ItemIndex (счёт с 0, –1, если ничего не выбрано), а его текст получают как ListBox1.Items[i]. В коде список заполняют так: ListBox1.Items.Add('Olma'); а количество элементов находится в Items.Count. SpinEdit предназначен для ввода целого числа: число хранится в свойстве Value как целое, поэтому его не нужно пропускать через StrToInt; наименьшее и наибольшее значения находятся в MinValue и MaxValue, шаг – в Increment. В Delphi 7 SpinEdit находится на вкладке Samples; в других средах (например, Lazarus) он может быть на другой вкладке.

Примеры
«Фрукты»: ListBox1 – Olma, Nok, Uzum, Anor (цена 1 кг: 12000, 15000, 20000, 25000 сумов); SpinEdit1 – кг (MinValue = 1, MaxValue = 10, Value = 1); ListBox2 – заказ. глобально: var p: array[0..3] of Integer; total: Integer; procedure TForm1.Button1Click(Sender: TObject); ⏎ var i: Integer; ⏎ begin ⏎  i := ListBox1.ItemIndex; ⏎  if i >= 0 then ⏎  begin ⏎    ListBox2.Items.Add(ListBox1.Items[i] + ' x ' + IntToStr(SpinEdit1.Value)); ⏎    total := total + p[i] * SpinEdit1.Value; ⏎    Label1.Caption := 'Jami: ' + IntToStr(total); ⏎  end; ⏎ end;
Цены p[0] := 12000; p[1] := 15000; p[2] := 20000; p[3] := 25000; и total := 0; записываются в OnCreate. Olma 3 кг (3·12000 = 36000), затем Uzum 2 кг (2·20000 = 40000): в ListBox2 две строки и Jami: 76000. Третий элемент – это ListBox1.Items[2] = Uzum, потому что счёт начинается с 0.
Работа в классе

«Магазин фруктов»: пара расширяет приложение: добавляет новый фрукт и цену, заранее вычисляет итог для 3 заказов и сравнивает его с результатом в приложении.

Упражнения
1
Какое свойство хранит номер выбранного элемента в ListBox?
2
Если ListBox1.Items.Add('Anor') выполняется, когда в списке 4 элемента, сколько элементов станет?
3
Nok стоит 15000 сумов/кг. Чему равен итог для 4 кг Nok и 2 кг Anor (25000)?
4
Почему для SpinEdit.Value не нужна StrToInt?