Съхранявайте струна заедно с низ в списъка на Delphi's ListBox

click fraud protection

TListBox и TComboBox на Delphi показват списък с елементи - низове в "избираем" списък. TListBox показва списък с възможност за превъртане, TComboBox показва падащ списък.

Обща собственост на всички горепосочени контроли е Предмети Имот. Елементите определят списък от низове, които ще се появят в контрола за потребителя. По време на проектиране, когато щракнете двукратно върху свойството "Предмети", "String List Editor" ви позволява да задавате низови елементи. Свойството "Всъщност" е всъщност потомък от типа TStrings.

Две низове за артикул в списъчна кутия?

Има ситуации, когато искате да покажете a списък с низове за потребителя, например в контролното поле на списъка, но също така да има начин да съхранявайте още един допълнителен низ покрай този, показан на потребителя.

Нещо повече, може да искате да съхранявате / прикачвате повече от просто "обикновен" низ към низ прикачи обект към елемента (низ).

ListBox. Предмети - TStrings "Знае" Обекти!

Накарайте обекта TStrings още един поглед в Помощната система. Там е

instagram viewer
обекти свойство, което представлява набор от обекти, които са свързани с всеки от струни в свойството Strings - където свойството Strings препраща към действителните низове в списъка.

Ако искате да присвоите втори низ (или обект) на всеки низ в полето на списъка, трябва да попълвате свойството на елементи по време на изпълнение.

Докато можете да използвате ListBox. Предмети. Добави метод за добавяне на низове в списъка, за да свържете обект с всеки низ, ще трябва да използвате друг подход.

Най- ListBox. Предмети. AddObject метод приема два параметъра. Първият параметър "Елемент" е текстът на елемента. Вторият параметър, "AObject", е обектът, свързан с елемента.

Обърнете внимание, че полето за списък разкрива Добавете артикул метод, който прави същото като елементи. AddObject.

Две струни за една струна

Тъй като и двата предмета. AddObject и AddItem приемат променлива от тип TObject за втория си параметър, ред като:

// грешка при компилиране!
ListBox1.Items. AddObject ('zarko', 'gajic'); 

ще доведе до грешка при компилиране: E2010 Несъвместими типове: 'TObject' и 'string'.

Не можете просто да предоставите низ за обекта, тъй като в Delphi for Win32 низ стойностите не са обекти.

За да присвоите втори низ на елемента от списъка, трябва да "трансформирате" променлива на низ в обект - имате нужда от персонализиран обект TString.

Цяло число за низ

Ако втората стойност, която трябва да запазите заедно с елемента от низа, е цяло число, всъщност не се нуждаете от персонализиран клас TInteger.

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

Редът по-горе съхранява цяло число „1973“ заедно с добавения низ „Зарко Гаич“.

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

За да върнете цяло число, свързано с низа, трябва да върнете "обекта" обратно към целочислената стойност:

// година == 1973
година: = Целочислено (ListBox1.Items). Обекти [ListBox1.Items. IndexOf („Зарко Гаич“)]); 

Контрол на Delphi за низ

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

Тъй като контролите на Delphi всъщност са обекти, можете да прикачите контрола към всеки низ, показан в полето за списък.

Следващият код добавя към надписите ListBox1 (полето за списък) на всички контроли на TButton във формуляр (поставете това в OnCreate обработващия събитие на формата) заедно с препратката към всеки бутон.

Var idx: цяло число; започвамза idx: = 0 да се -1 + ComponentCount правязапочвамако Компоненти [IDX] е TButton тогава ListBox1.AddObject (TButton (Компоненти [idx]). Надпис, Компоненти [idx]); край; край; 

За да „кликнете“ програмно върху „втория“ бутон, можете да използвате следващото изявление:

 TButton (ListBox1.Items).. Обекти [1]) Натисни; 

Искам да присвоя моите потребителски обекти на струнния елемент

В по-обща ситуация ще добавите екземпляри (обекти) от собствените си персонализирани класове:

Тип TStudent = класчастен fName: низ; година: цяло число; общественИмот Име: четене на низ fName; Имот Година: цяло число Прочети fYear; конструктор Създаване (конст име: низ; конст година: цяло число); край;... конструктор TStudent. Създаване (конст име: низ; конст година: цяло число); започвам fName: = име; година: = година; край; започвам// добавете два низа / обекта -> студенти в списъка ListBox1.AddItem („Джон“, TStudent. Създайте ('Джон', 1970)); ListBox1.AddItem ('Jack', TStudent. Създайте ('Jack', 1982)); // вземете първия ученик - Джон студент: = ListBox1.Items. Обекти [0] като TStudent; // показване на годината на Джон ShowMessage (IntToStr (студент) Година)); край; 

Какво създавате вие ​​трябва да бъде безплатно

Ето какво трябва да каже Помощта за обекти в TStrings потомци: TStrings обектът не притежава обектите, които добавяте по този начин. Обектите, добавени към обекта TStrings, все още съществуват, дори ако екземплярът TStrings е унищожен. Те трябва да бъдат изрично унищожен от приложението.

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

Обща персонализирана процедура FreeObjects приема променлива от тип TStrings като свой единствен параметър. FreeObjects ще освободи всички обекти, свързани с елемент от списъка с низове В горния пример "студентите" (клас TStudent) са прикачени към низ в полето със списък, когато приложението е на път да бъде затворено (главна форма OnDestroy събитие, например), трябва да освободите паметта заета:

 FreeObjects (ListBox1.Items); 

Забележка: Тази процедура се обаждате само когато обекти, зададени на низови елементи, са създадени от вас.

instagram story viewer