Чувајте низ уз низ у Делпхи'с ЛистБоку

Делпхи-јеви ТЛистБок и ТЦомбоБок приказују листу ставки - низова на листи "која се може одабрати". ТЛистБок приказује листу која се може помицати, ТЦомбоБок приказује падајућу листу.

Заједничко својство свих горе наведених контрола је Предмети својство. Ставке дефинишу листу низова који ће се појавити у контроли кориснику. У време дизајна, када двапут кликнете на својство ставке, „Едитор листе стрингова“ омогућава вам да одредите стрингове. Својство Итемс је уствари потомак типа ТСтрингс.

Две жице по ставци у листи?

Постоје ситуације када желите да прикажете а листа струна кориснику, на пример у пољу за контролу листе, али такође има и начина да похраните још један низ дуж оног који је приказан кориснику.

Шта више, можда бисте желели да похраните / додате више низа само обичног низа за стринг, што бисте можда желели додавање објекта ставки (стрингу).

Листа кутија. Артикли - ТСтрингс "Зна" предмете!

Дајте објекту ТСтрингс још један поглед у систем помоћи. Ту је Објекти својство које представља скуп објеката који су повезани са сваким од

instagram viewer
жице у својству Стрингс - где својство Стрингс наводи стварне низове на листи.

Ако желите да додијелите други низ (или објект) сваком низу у пољу са списком, морате да испуните својство предмета у току извођења.

Док можете да користите Листа кутија. Предмети. Додати методу за додавање жице на листу, за придруживање објекта сваком низу, морат ћете користити други приступ.

Тхе Листа кутија. Предмети. АддОбјецт метода прихвата два параметра. Први параметар, "Ставка", је текст ставке. Други параметар, "АОбјецт" је објект повезан са ставком.

Имајте на уму да је у оквиру листе приказан Додајте ставку метода која ради исто као и Артикли. АддОбјецт.

Две жице за једну жицу

Пошто обе ставке. АддОбјецт и АддИтем прихватају променљиву типа ТОбјецт за свој други параметар, линију попут:

// грешка при састављању!
ЛистБок1.Итемс. АддОбјецт ('зарко', 'гајиц'); 

резултираће грешком у компајлирању: Е2010 Некомпатибилни типови: 'ТОбјецт' и 'стринг'.

Не можете једноставно давати низ за објект јер у низу Делпхи фор Вин32 вредности низа нису објекти.

Да бисте ставци оквира с листе додали други низ, морате да "трансформишете" варијаблу низа у објект - потребан вам је прилагођени ТСтринг објект.

Читав низ за низ

Ако је друга вредност коју требате да похраните заједно са ставком низа цела вредност, заправо вам није потребна прилагођена класа ТИнтегер.

 ЛистБок1.АддИтем ('Жарко Гајић', ТОбјецт (1973)); 

Горња линија чува цео број „1973“ заједно са доданом низом „Жарко Гајић“.

Изнад је направљен директан типецаст од целог броја до објекта. Параметар "АОбјецт" је заправо 4-бајтни показивач (адреса) додатог објекта. Будући да у Вин32-у цели бројеви заузимају 4 бајта - такав је хард цаст могућ.

Да бисте вратили цели број повезан са низом, морате да вратите "објект" на вредност целог броја:

// година == 1973
година: = Интегер (ЛистБок1.Итемс). Објекти [ЛистБок1.Итемс. ИндекОф ('Жарко Гајић')]); 

Делпхи контрола за низ

Зашто се зауставити овде? Додјељивање стрингова и целих бројева низу у оквиру са списком је, као што сте управо искусили, комад торте.

Будући да су Делпхи контроле заправо објекти, можете да причврстите контролу на сваки низ приказан у пољу са списком.

Следећи код додаје се на спискове ЛистБок1 (списак) свих контрола ТБуттон-а на обрасцу (ставите ово у ОнЦреате обрађивач догађаја форме) заједно са позивом на свако дугме.

вар идк: интегер; започетиза идк: = 0 до -1 + ЦомпонентЦоунт урадитизапочетиако Компоненте [идк] је ТБуттон онда ЛистБок1.АддОбјецт (ТБуттон (Цомпонентс [идк]). Натпис, компоненте [идк]); крај; крај; 

Да бисте програмски „кликли“ на „друго“ дугме, можете користити следећу изјаву:

 ТБуттон (ЛистБок1.Итемс). Објекти [1]) Кликните; 

Желим доделити својим прилагођеним објектима струну

У опћенитијој ситуацији додали бисте инстанце (објекте) сопствених прилагођених класа:

тип ТСтудент = класаприватни фНаме: стринг; година: цео број; јавнисвојство Име: читање низа фНаме; својство Година: цели број читати година; конструктор Креирај(цонст име: низ; цонст година: цели број); крај;... конструктор ТСтудент. Креирај(цонст име: низ; цонст година: цели број); започети фНаме: = име; година: = година; крај; започети// додати два низа / објекте -> студентима у листу ЛистБок1.АддИтем ('Јохн', ТСтудент. Створи ('Јохн', 1970)); ЛистБок1.АддИтем ('Јацк', ТСтудент. Креирај ('Јацк', 1982); // зграбите првог ученика - Јохна студент: = ЛистБок1.Итемс. Објекти [0] као ТСтудент; // прикажите Иванову годину СховМессаге (ИнтТоСтр (студент). Година)); крај; 

Оно што сте створили мора да буде бесплатно

Ево што Помоћ мора рећи о објектима у ТСтрингс потомцима: ТСтрингс објект не посједује објекте које на овај начин додајете. Објекти додани ТСтрингс објекту и даље постоје чак и ако је ТСтрингс инстанца уништена. Морају бити експлицитно уништено путем апликације.

Када додате објекте у жице - објекте које креирате - морате бити сигурни да сте ослободили заузету меморију или ћете је имати цурење меморије

Опћенита прилагођена процедура ФрееОбјецтс прихвата варијаблу типа ТСтрингс као једини параметар. ФрееОбјецтс ће ослободити све објекте повезане са ставком у листи низа. У горњем примеру, „студенти“ (ТСтудент класа) су приложени низ у пољу са списком, када се апликација затвара (на пример главни облик ОнДестрои догађаја), потребно је да ослободите меморију заузето:

 ФрееОбјецтс (ЛистБок1.Итемс); 

Напомена: Ову процедуру називате само када сте ви створили предмете додељене ставкама низа.

instagram story viewer