Информация

Сохранить строку (или объект) со строкой в ​​ListBox или ComboBox

Сохранить строку (или объект) со строкой в ​​ListBox или ComboBox


We are searching data for your request:

Forums and discussions:
Manuals and reference books:
Data from registers:
Wait the end of the search in all databases.
Upon completion, a link will appear to access the found materials.

Delphi TListBox и TComboBox отображают список элементов - строк в «выбираемом» списке. TListBox отображает прокручиваемый список, TComboBox отображает раскрывающийся список.

Общим свойством всех вышеперечисленных элементов управления является Предметы свойство. Элементы определяют список строк, которые будут отображаться в элементе управления для пользователя. Во время разработки, когда вы дважды щелкаете свойство Items, «Редактор списка строк» ​​позволяет указывать строковые элементы. Свойство Items на самом деле является потомком типа TStrings.

Две строки на элемент в ListBox?

Существуют ситуации, когда вы хотите отобразить список строк для пользователя, например, в элементе управления списком, но также есть способ сохранить еще одну дополнительную строку вдоль отображаемой пользователю.

Более того, вы можете захотеть сохранить / присоединить к строке больше, чем просто «простую» строку, вы можете захотеть прикрепить объект к предмету (строке).

ListBox.Items - TStrings "Знает" Объекты!

Дайте объекту TStrings еще один взгляд в справочной системе. Там есть Объекты Свойство, представляющее набор объектов, связанных с каждой из строк в свойстве Strings, где свойство Strings ссылается на фактические строки в списке.

Если вы хотите назначить вторую строку (или объект) каждой строке в списке, вам необходимо заполнить свойство Items во время выполнения.

Хотя вы можете использовать ListBox.Items.Add Для добавления строк в список, чтобы связать объект с каждой строкой, вам нужно будет использовать другой подход.

ListBox.Items.AddObject Метод принимает два параметра. Первый параметр «Элемент» - это текст элемента. Второй параметр «AObject» - это объект, связанный с элементом.

Обратите внимание, что в списке отображается Добавьте предмет метод, который делает то же самое, что и Items.AddObject.

Две струны для одной струны

Поскольку оба Items.AddObject и AddItem принимают переменную типа TObject для своего второго параметра, строка выглядит так:

// ошибка компиляции! ListBox1.Items.AddObject ('zarko', 'gajic');

приведет к ошибке компиляции: E2010 Несовместимые типы: 'TObject' и 'string'.

Вы не можете просто предоставить строку для объекта, поскольку в Delphi для Win32 строковые значения не являются объектами.

Чтобы назначить вторую строку элементу списка, вам нужно «преобразовать» строковую переменную в объект - вам нужен собственный объект TString.

Целое число для строки

Если второе значение, которое необходимо сохранить вместе со строковым элементом, является целочисленным значением, вам фактически не нужен пользовательский класс TInteger.

ListBox1.AddItem ('Zarko Gajic', TObject (1973));

В строке выше хранится целое число «1973» вместе с добавленной строкой «Zarko Gajic».

Прямая типизация от целого числа до объекта производится выше. Параметр «AObject» фактически является 4-байтовым указателем (адресом) добавляемого объекта. Поскольку в Win32 целое число занимает 4 байта - такое сложное приведение возможно.

Чтобы вернуть целое число, связанное со строкой, вам необходимо привести «объект» обратно к целочисленному значению:

// год == 1973 year: = Integer (ListBox1.Items.ObjectsListBox1.Items.IndexOf ('Zarko Gajic'));

Delphi Control для строки

Зачем здесь останавливаться? Присвоение строк и целых чисел строке в списке - это, как вы только что испытали, кусочек торта.

Поскольку элементы управления Delphi на самом деле являются объектами, вы можете прикрепить элемент управления к каждой строке, отображаемой в списке.

Следующий код добавляет к списку ListBox1 (список) подписи всех элементов управления TButton в форме (поместите это в обработчик события OnCreate формы) вместе со ссылкой на каждую кнопку.

вар idx: целое число; начать   для idx: = 0 в -1 + ComponentCount делать   начать     если Componentsidx является TButton тогда ListBox1.AddObject (TButton (Componentsidx) .Caption, Componentsidx);конец; конец;

Чтобы программно «нажать» «вторую» кнопку, вы можете использовать следующую инструкцию:

TButton (ListBox1.Items.Objects1) .Нажмите;

Я хочу назначить мои пользовательские объекты строковому элементу

В более общей ситуации вы бы добавили экземпляры (объекты) ваших собственных пользовательских классов:

тип TStudent = учебный класс   частный fName: строка; год: целое число;общественности     свойство Название : чтение строки Fname;свойство Год: целое число читать fYear;конструктор Создайте(Const название : строка; Const год: целое число);конец;… конструктор TStudent.Create (Const название : строка; Const год: целое число); начать fName: = имя; год: = год; конец; -------- начать   // добавить две строки / объекты -> студентов в список ListBox1.AddItem («Джон», TStudent.Create («Джон», 1970)); ListBox1.AddItem («Джек», TStudent.Create («Джек», 1982));// схватить первого ученика - Джона student: = ListBox1.Items.Objects0 как TStudent;// показать год Джона ShowMessage (IntToStr (student.Year)); конец;

То, что вы создаете, вы должны бесплатно

Вот что говорит Справка об объектах потомков TStrings: объект TStrings не владеет объектами, которые вы добавляете таким образом. Объекты, добавленные в объект TStrings, все еще существуют, даже если экземпляр TStrings уничтожен. Они должны быть явно уничтожен по заявке.

Когда вы добавляете объекты в строки - объекты, которые вы создаете - вы должны убедиться, что вы освободили занятую память, иначе у вас будет утечка памяти

Универсальная пользовательская процедура FreeObjects принимает переменную типа TStrings в качестве единственного параметра. FreeObjects освободит любые объекты, связанные с элементом в списке строк. В приведенном выше примере «студенты» (класс TStudent) присоединяются к строке в списке, когда приложение закрывается (событие главной формы OnDestroy, для пример), нужно освободить занятую память:

FreeObjects (ListBox1.Items);

Примечание: Вы вызываете эту процедуру, только когда объекты, назначенные строковым элементам, были созданы вами.


Смотреть видео: Урок 5. Заполнение списков ComboBox. Excel+VBA. Система учета Интернет-магазина (July 2022).


Комментарии:

  1. Kajin

    Что тогда?

  2. Akinojar

    Это все о условиях

  3. Dik

    Я много читал по этой теме сегодня.

  4. Kinris

    Похожее есть что-то?

  5. Wilburn

    Какая прекрасная тема



Напишите сообщение