Компоненты Delphi страницы StandartКомпонент Delphi ListBox |
Уроки Delphi
1. Первая программа
2. Использование компонентов
3. События Delphi
4. Типы данных Delphi
5. Создание своих типов данных
6. Выражения и операторы
7. Работа с файлами в Delphi
8. Дополнительные формы
9. Подпрограммы в Delphi
10. Исключительные ситуации
11. Взаимодействие приложения с пользователем
12. Указатели в Delphi
13. Обзор компонентов
14. Работа со строками
15. Создание интерфейса
16. Графика в Delphi
17. Многопоточность в Delphi
18. Динамическое создание
компонентов Поиск по сайту Это важно:
Метод Application.ProcessMessages;
Это полезно:
Параметр Sender в обработчиках событий;
Бояться не надо |
Компонент Delphi ListBox это компонент, служащий для хранения и обработки текстовой информации. Каждая строка Delphi ListBox хранит строку данных в формате String.
Компонент ListBox - это массив строк. ListBox может загружать данные с диска, и сохранять информацию в файл. Также ListBox может сортировать строки. Доступ к строкам предоставляет свойство Items этого компонента. В соответствии с этим, вот как происходит обращение к строке с номером i: ListBox1.Items[i-1]; // Минус один, так как нумерация строк в компоненте начинается с нуля. Прежде всего рассмотрим методы добавления строк в компонент Delphi ListBox:
Методы добавления строк в компонент Delphi ListBoxПользователь может выделить строку, щёлкнув по ней мышкой. Номер выделенной строки возвращает свойство компонента ListBox.ItemIndex. То есть, получить текст выделенной строки можно так: S := ListBox1.Items[ListBox1.ItemIndex]; Не забывайте пользоваться оператором присоединения with. С его использованием это присваивание выглядит так:
with ListBox1 do При многократном использовании свойств компонента данная запись очень экономит силы. Кстати, оператор присоединения допускает работу с несколькими компонентами, которые нужно разделить запятой. Например, присваивание строки компонента ListBox ячейке таблицы StringGrid выглядит так:
with ListBox1, StringGrid1 do Для удаления строк из компонента применяется метод Delete. Удаление строки с номером i: ListBox1.Items.Delete(i); Чтобы при добавлении каждая строка была отсортирована (сортировка идёт только по возрастанию), нужно установить: ListBox1.Sorted := True; Также возможно установить это свойство на этапе конструирования в Инспекторе Объектов. К сожалению, компонент не обладает возможностью добавлять только уникальные данные. Один и тот же текст запишется несколько раз. Для реализации этой возможности приходится дополнительно применять невизуальный аналог компонента ListBox - объект StringList, обладающий такой возможностью:
procedure TForm1.Button1Click(Sender: TObject); Компонент ListBox автоматически добавит полосу прокрутки, если количество строк не помещается по высоте компонента. Высота каждой строки равна ItemHeight. Если нужно чтобы при добавлении новой строки полоса прокрутки точно не возникла, этот размер нужно добавить к высоте компонента. Но делать это нужно только начиная с определённого количества строк. Поэтому нужно делать проверку:
ListBox1.Items.Add('Новая_строка'); Но если высота компонента не нацело делится на высоту строки, то прокрутка всё равно возникнет. Поэтому нужно отнять единичку:
ListBox1.Items.Add('Новая_строка'); Однако на долю секунды полоса прокрутки всё-таки появляется. Поэтому сначала сделаем проверку, а затем уже будем добавлять строку. В этом случае уже нужно отнимать не 1, а 2:
with ListBox1 do
Обзор компонентов Delphi
В начало урока
Компонент Delphi ComboBoxВопросы и комментарии (34) Решение задач в Delphi
Андрей, добавлено 29.07.10, 10:29:49
Здравствуите! Меня интересует вопрос как записать информацию из ListBox1 в текстовай файл? Андрей, добавлено 29.07.10, 10:36:07 Точнее по другому. есть код: var s: TStringList; begin s := TStringList.Create; s.Add(Edit1.Text); s.Add(Edit2.Text); s.Add(Edit3.Text); s.Add(Edit4.Text); s.SaveToFile(edit5.Text+'.txt'); s.Free; Текст из едит5 задает имя файла, надо чтобы в этот файл автоматически заносилась информация из ListBox Андрей, добавлено 29.07.10, 10:38:00 И можно ли так сделать чтобы заносилась не вся информация, а только та, которую я выделю щёлкнув по ней мышкой? Спасибо! Автор, добавлено 29.07.10, 11:55:48 У ListBox тоже есть метод SaveToFile: ListBox1.Items.SaveToFile(FileName); Вместо FileName подставляете значение из Edit5 - это у Вас уже есть в приведённом примере - вот и ответ на первый вопрос. Как заносить информацию в текстовый файл почитайте в соответствующем уроке Работа с файлами. Щёлкаете по строчке ListBox, она выделяется. Её индекс ListBox1.ItemIndex - и сохраняете её методом Readln. Александр, добавлено 9.11.10, 20:54:43 Андрей, создаеш один TButton и TSaveDialog после чего пишеш такой код: procedure TForm1.Button1Click(Sender: TObject); begin Savedialog1.InitialDir:=GetCurrentDir; if not SaveDialog1.Execute then ShowMessage ('Файл не сохранен! Сохраните его пожалуйста.') else ListBox1.Items.SaveToFile(SaveDialog1.FileName); end; Автор, добавлено 9.11.10, 22:21:29 Александр, в вашем варианте будет сохранен весь ListBox, а не только выделенная строка. Михаил, добавлено 15.04.11, 00:50:22 Скажите пожалуйста, как скопировать список строк TStringList в ListBox или Memo (TStringList использовал для удаления дубликатов) Автор, добавлено 15.04.11, 06:49:58 От простоты вопроса можно даже растеряться...
Михаил, добавлено 15.04.11, 20:42:55 Благодарю Вас Константин, добавлено 4.05.11, 19:19:30 Помогите пожалуйста. У меня есть два ListBox в одном есть стоки , другой пустой при нажатии кнопки у меня выделеная строка должна перенестись в другой листбох как это сделать ? Автор, добавлено 4.05.11, 20:21:18 Константин, это делается так же, как и добавление в ListBox произвольного содержимого. Если бы вы дали себе труд прочесть текст статьи, то нашли бы там сведения о том, и как получить содержимое выделенной строки, и как добавить её в ListBox. Ну да ладно:
Аноним, добавлено 4.05.11, 20:41:20 уже сам понял))) вот еще а как все содержимое листбокса перетащить куданибудь? Автор, добавлено 4.05.11, 22:23:22 Сохранить в файл
или в другой компонент работающий со строками, например, Memo:
или текстовую переменную:
или ещё куда-нибудь... Константин , добавлено 6.05.11, 20:30:17 А можете обьяснить как с PopupMenu работать я не могу понять как его включать. Автор, добавлено 6.05.11, 21:45:06 компонент popupmenu Катя, добавлено 31.03.13, 23:41:14 Создай программу, которая стоит из одной формы. Размести 1 ListBox в форме 1 button. Пусть ListBox выяснится на две важности: Форма и button. Процедура, которая выяснилась предваряя в то время, которое давило button, ListBox на -та выбран согласно важности той формы или пусть считая периметрию тиснения, на окне сообщения укажет Автор, добавлено 1.04.13, 06:47:01 Смешно! С 1-м апреля! А теперь по-русски. Владимир, добавлено 25.06.13, 06:46:57 Подскажите пожалуйста как избежать вариантов дубликатов. при выполнении кода дает много дубликатов в ListBox6. begin for i := 0 to Listbox4.Items.Count - 1 do for j := 0 to Listbox5.Items.Count - 1 do if pos(ListBox4.Items.Strings[i],ListBox5.Items.strings[j])>0 then ListBox6.Items.Add(listbox5.Items.Strings[j]); end; Автор, добавлено 25.06.13, 16:31:56 О! В конце статьи даётся ответ на этот вопрос. Итак, читайте статью, изучайте и юзайте StringList. Максим, добавлено 8.07.13, 14:54:28 Здравствуйте. А можно ли добавлять в ListBox элементы не сверху вниз, а наоборот - снизу вверх? Автор, добавлено 8.07.13, 23:41:25 Там в статье есть табличка, читай 3-ю строку. Александр, добавлено 23.10.13, 18:55:06 Подскажите пожалуйста, как отключить прокрутку листбокса когда в нем много записей? Или как сделать так, чтобы он был не в фокусе(контроль)? А то если что-то выделил в листбоксе, то он все время в фокусе находится и при прокрутке колесиком, где бы курсор не находился, листбокс реагирует на данное действие до тех пор пока не клацнешь кнопку. Автор, добавлено 23.10.13, 19:06:15 Ну, можно в обработчике OnClick ChekBox'а написать Button1.SetFocus; - то есть переместить фокус куда нужно. При этом пункт будет выделенным, а прокручивать можно нажимая на прокрутку мышкой ...если я вас правильно понял. Сергей, добавлено 19.12.13, 22:43:03 Возможно ли содержимое компонента Listbox записать в двумерный массив строк? Автор, добавлено 19.12.13, 22:50:20 Возможно. Смотря что под этим понимать. Сергей, добавлено 24.12.13, 20:32:09 Прошу помочь в решении задачи. Компонент Listbox заполняется в процессе работы приложения строками (их количество заранее неизвестно). Как реализовать возможность, при которой пользователь выбирая одну из строк Listbox двойным щелчком передает тем самым ее содержимое переменной основной процедуры. Автор, добавлено 24.12.13, 23:37:50 В обработчике двойного щелчка нужно написать: S:= ListBox.Items[ListBox.ItemIndex]; Непонятно отчего вопрос возник, наипростейшая операция, описана в тексте статьи. Сергей, добавлено 25.12.13, 20:05:07 Простейшая, но почему-то значение индекса при этом постоянно равно минус единице. Сергей, добавлено 25.12.13, 20:09:53 EStringListError with message 'List index out of bounds (-1)'. Process stopped. Автор, добавлено 25.12.13, 20:35:16 "значение индекса при этом постоянно равно минус единице" - с чего бы это?
123, добавлено 3.01.14, 09:21:56 как подключение listbox delphi с таблицей access Автор, добавлено 3.01.14, 09:38:45 А как? - никак. Для баз данных есть другие специализированные компоненты. DBListBox на странице Data Controls. Максим, добавлено 8.01.14, 01:02:00 Подскажите пожалуйста,а если в ListBox уже есть элементы,а при следующем добавлении нужно добавить новые элементы в начало списка,а не в конец,то нет ли такого свойства в ListBox?или только использовать Insert нужно? Автор, добавлено 8.01.14, 05:35:56 Insert это и есть тот самый метод. |
|