Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.02.26;
Скачать: [xml.tar.bz2];

Вниз

TListBox и TStrings   Найти похожие ветки 

 
Bratskiy ©   (2006-02-07 05:04) [0]

Доброго дня суток всем.
Суть проблемы в следующем:

На форме есть два TListBox"а. Они нужны для перебрасывания строк из одного в другой (аналог их работы есть в Delphi: Project->Options->Forms)

Строки переходят из одного в другой и обратно нормально.

Мне нужно чтобы в зависимости от нахождения определённой строки во втором ListBox"е в базу записывалось поле с булевым значением. Я делаю так:


with DModule do
.........
ElemTable.Append;
.........
if ListBox2.IndexOfName("Комментарии") = -1 then
ElemTable.FieldValues["comment"]:=false
else ElemTable.FieldValues["comment"]:=true;
........
ElemTable.Append;
........

Проверяю, получается что в базу при любом варианте записывается false.

Добавляю на эту же форму кнопку для проверки, пишу аналогичный код

if ListBox2.IndexOfName("Комментарии") = -1 then
MessageDlg("Нету")
else MessageDlg("Есть");


Проверяю - всё нормально работает. В чём проблема понять не могу.

Далее создаю объект типа TStrings

MyList: TStrings;
..........
MyList:=MyList:=TStringList.Create;
MyList:=ListBox2.Items;
..........
if MyList.IndexOf("Комментарии") = -1 then
ElemTable.FieldValues["comment"]:=false
else ElemTable.FieldValues["comment"]:=true;

Так работает нормально, т. е. записывает в базу правильное значение. Но по завершению работы TStrings вроде надо из памяти выгружать.
Пишу:
MyList.Free;
Вроде всё нормально, но когда закрываю форму вылазит ошибка "Access violation". Убираю деструктор (Free), ошибки нет
Опытные люди, подскажите, где у меня что не правильно.


 
Джо ©   (2006-02-07 05:24) [1]

> Далее создаю объект типа TStrings
>
> MyList: TStrings;
> ..........
> MyList:=MyList:=TStringList.Create;
> MyList:=ListBox2.Items;
> ...
> MyList.Free;

Комментирую
1. MyList:=MyList:=TStringList.Create; Этим ты создал объект класса TStringList, ссылку на этот новосозданный объект сохранил в переменной MyList.
2. MyList:=ListBox2.Items; Этим кодом ты в переменной MyList сохранил ссылку на объект TStringList, ссылка на который находится в ListBox2.Items. При этом, ссылку на объект, созданный в пункте (1) ты утерял.
3. MyList.Free; Этим ты уничтожил объект, который создавал не ты, а ListBox. При итом, объект, созданный тобой в (1) ты как раз и не удалил.

По поводу всего остального — не знаю, как говориться: ошибка где-то в твоем коде.


 
Bratskiy ©   (2006-02-07 05:38) [2]


> MyList:=MyList:=TStringList.Create;

Здесь у меня очепятка
В коде
MyList:=TStringList.Create;

Спаибо, я всё понял. Получается, что конструктор и деструктор использовать не надо, переменная MyList создаётся сама, когда присваиваешь ей ListBox2.Items и выгружается тоже сама, когда выгружается ListBox, то есть когда выгружается форма.


 
YurikGL ©   (2006-02-07 07:22) [3]


> переменная MyList создаётся сама, когда присваиваешь ей
> ListBox2.Items и выгружается тоже сама, когда выгружается
> ListBox

Переменная MyList создается, когда ты ее объявил в var. Она представляет собой указатель на объект, который мог быть еще не создан. Если ты присваиваешь переменную переменной т.е. MyList:=ListBox2.Items ты перенаправляешь два разных указателя на один и тот же список. Т.е. у тебя как был один список так он и остался (не считая того, который ты создал MyList:=TStringList.Create; и на который ты потерял после MyList:=ListBox2.Items) но изменять его теперь можно как через MyList, так и через ListBox2.Items.



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2006.02.26;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.039 c
3-1135838346
mss
2005-12-29 09:39
2006.02.26
Ошибка в Interbase


2-1139530362
kimona
2006-02-10 03:12
2006.02.26
массив


15-1138992676
БарЛог
2006-02-03 21:51
2006.02.26
Помогите скачать mp3


1-1137077035
DelphiLexx
2006-01-12 17:43
2006.02.26
TChart со стилем TPoint


2-1139773723
Непонятка
2006-02-12 22:48
2006.02.26
Как вызвать процедуру?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский