Помогите, пожалуйста, решить проблему с кодом на delphi!!!

программирование Delphi делфи ошибка программный код

У меня на форме есть едит1, спидбатон1 и листбокс1. Я хочу что бы при нажатии спидбатон1, текст, введённый в едит1, копировался в листбокс1 и при этом создавал отдельный файл с этим же именем. Но если же в листбокс1 будет уже, в определённой строчке, такой текст который я добавляю, так я хочу, что бы он вывел на экран ошибочку, с текстом 'Такая категория уже есть!'. В итоге выбивает ошибку на третьем элементе, которого добавляю. Пишет http://cs9295.vk.me/v9295114/683/-FERniOSToY.jpg , ошибку выделяет на * строке, продолжаю дальше работу приложения http://cs9295.vk.me/v9295114/67b/qPESem0p814.jpg . Я зол ужасно. Что только не перепробовал. Всё что можно только выбивало. Но это более приближённый код к рабочему, как мне кажется. Помогите, пожалуйста. Достал уже этот код.


procedure TForm2.SpeedButton2Click(Sender: TObject);
var other,FilePut,CatSavePut:string; z:Integer; j:System.Text;
begin
FilePut:=ExtractFilePath(Application.ExeName);
CatSavePut:=FilePut+'Data\category\';
ForceDirectories(CatSavePut);
if ListBox3.Items.Count<>0 then
begin
for z:=1 to ListBox3.Items.Count do
begin
if Edit2.Text=ListBox3.Items[z-1] then
begin
MessageDlg('Такая категория уже есть!', mtError,[mbOK],0);
end
else
begin
ListBox3.Items.Add(Edit2.Text);
other:=CatSavePut+Edit2.Text;
AssignFile(j, other);
Rewrite(j); <- *
closefile(j);
Edit2.Clear;
end;
end;
end
else
if ListBox3.Items.Count=0 then
begin
ListBox3.Items.Add(Edit2.Text);
other:=CatSavePut+Edit2.Text;
AssignFile(j, other);
Rewrite(j);
closefile(j);
Edit2.Clear;
end;
end;

Примечание:
Андрей Архангельский, программирование приходит с опытом.
1) Потому что тип String по своим свойствам не может заменить тип System.text либо TextFile(кстати, я переправил в TextFile).
2) ListBox.LoadFromFile и ListBox.SaveToFile используются тогда когда сам этот файл существует. А когда его нужно программно создать? Вот так, насколько я знаю, и делают.
3) ListBox.Items.IndexOf(Edit2.text) - не совсем понимаю как это работает. Не подскажите? В гугле тоже не ясно ничего.

А по поводу отладчика - чуть позже попробую. Статью нашёл про это, буду разбирать.

Примечание:
Спасибо всем, кто помог. Сделал код таким образом:
procedure TForm2.SpeedButton2Click(Sender: TObject);
var other:string; z,y:Integer;
begin
z := 0;
while ((z < ListBox3.Items.Count) and (Edit2.Text <> ListBox3.Items[z])) do
begin
z := z + 1;
end;
if (z < ListBox3.Items.Count) then
MessageDlg('Такая категория уже есть!', mtError,[mbOK],0)
else
if Edit2.Text=''then
begin
MessageDlg('Введите новое название категории!', mtError,[mbOK],0)
end
else
begin
ListBox3.Items.Add(Edit2.Text);
Other:=CatSavePut+Edit2.Text;
AssignFile(j, other);
Rewrite(j);
closefile(j);
Edit2.Clear;
end;
ListBox3.Items.SaveToFile(CatCatSavePut);
ListBox3.Items.Clear;
y:=1;
AssignFile(j, CatCatSavePut);
Reset(j);
while not eof(j) do
begin
readln(j, Category[y].one);
ListBox3.Items.Add(Category[y].one);
y:=y+1;
end;
closefile(j);
end;
Ответы:
А если System.Text заменить на TextFile?
И что содержит переменная с именем файла other? Вы её проверяли на третьем цикле отладчиком?
Код достает, когда не умеешь проектировать!
1) Зачем тип System.text? Почему не использовать String?
2) Зачем записывать каждую строчку в файл? Для ListBox есть методы
ListBox.LoadFromFile и ListBox.SaveToFile - без лишних циклов и ошибок
3) Код сравнивает предыдущую категорию с текущей, что не гарантирует отсутствие таких же категорий в более ранних записях. Для проверки на уникальность нужно искать по всему списку с помощью метода ListBox.Items.IndexOf(Edit2.text) - если он возвращает более 0, значит такая категория уже есть
1) if ListBox3.Items.Count<>0 then  - не нужное условие
при ListBox3.Items.Count = 0 программа не зайдет в цикл, т.к. начальное значение z = 1
2) Правильнее в данном случае будет проверить наличие файла в начале алгоритма, например , так:
if FileExists(CatSavePut+Edit2.Text) then
 MessageDlg('Такая категория уже есть!', mtError,[mbOK],0)
else
//добавляем категорию в список, форсим директории, создаем файл


11 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.