Такая ошибка в Delphi: List index out of bounds (11).

интернет компьютеры программирование программы ПО

Я понимаю, что ошибка в том, что ListBox1 пустой.
Но в процедуре Button4Click ListBox1 заполняется данными. И по идее ошибка такая при выполнении процедуры Button4Click не должна появляться. Помогите, чем можете))) Вот код:

unit Unit4;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;

type
TForm4 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
LabeledEdit1: TLabeledEdit;
Button4: TButton;
Button2: TButton;
Button1: TButton;
ListBox1: TListBox;
LabeledEdit2: TLabeledEdit;
procedure LabeledEdit1Change(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure LabeledEdit2Change(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form4: TForm4;

implementation

uses Unit2, Unit1;

{$R *.dfm}

procedure TForm4.LabeledEdit1Change(Sender: TObject);
begin
LabeledEdit2.Enabled:=True;
If LabeledEdit1.Text='' then begin LabeledEdit2.Enabled:=False;

end;

end;

procedure TForm4.Button1Click(Sender: TObject);
begin
labelededit1.Clear;
labelededit2.Clear;
label1.Visible:=false;
end;

procedure TForm4.LabeledEdit2Change(Sender: TObject);
begin
Button4.Enabled:=True;
If LabeledEdit2.Text='' then begin Button4.Enabled:=False; end;
end;

procedure TForm4.Button4Click(Sender: TObject);
begin
ListBox1.Items.Add(LabeledEdit1.Text);
ListBox1.Items.Add(LabeledEdit2.Text);
form1.DBGrid1.Columns[11].PickList.add(ListBox1.Items.CommaText);
form1.DBGrid1.Columns[11].PickList.SaveToFile('listfiles\listPred.txt');
label1.Visible:=true;
label2.Visible:=true;
label3.Visible:=true;
label4.Visible:=true;
label5.Visible:=true;
ListBox1.Clear;
label4.Caption:=labelededit1.Text;
label5.Caption:=labelededit2.Text;
form2.Refresh;
form1.DBGrid1.Update;
end;

procedure TForm4.Button2Click(Sender: TObject);
begin
form4.Close;
form1.DBGrid1.Update;
Label1.Visible:=false;
Label2.Visible:=False;
Label3.Visible:=False;
label4.Caption:='';
label5.Caption:='';
end;

procedure TForm4.FormShow(Sender: TObject);
begin
form1.Enabled:=false;
end;

procedure TForm4.FormClose(Sender: TObject; var Action: TCloseAction);
begin
form1.Enabled:=true;
end;

end.

Примечание:
Вставил.
Вылетает ошибка после команд ListBox1.Items.Add(LabeledEdit1.Text) и ListBox1.Items.Add(LabeledEdit2.Text);
Как это исправить?

Примечание:
azlab.org, вы снова мне помогаете:))) насчёт P.S, я не работаю. Я ещё учусь. Поэтому у меня куча глупых и ламерских вопросов. А то, что я делаю в данный момент - первая более менее серьёзная программа для меня. И возможно, вскоре и деббагером научусь пользоваться)))
P.S. Насчёт нумерации с нуля знаю :)))
P.P.S. Отдельное спасибо вам за то, что мне всё помогаете!!!!!!!!
Ответы:
Ну вставьте между сомнительных строк строку Showmessage('1'); с разными номерами и определите, после выполнения какой команды вылетает ошибка.
А что написано в LabeledEdit'ах на момент добавления строки в список?
Данная ошибка - это выход за пределы списка / массива. По всей видимости, Columns[11] - просто не существует (надеюсь вы знаете, что нумерация начинается с нуля? то есть для обращения к 11 полю, нужно использовать индекс 10). Вообще, что вам мешает вычислить в какой строке происходит ошибка? Во всех Делфи - великолепный деббагер. Кликните мышкой слева от начала строки, с которой начинается процедура (в вашем случае это: ListBox1.Items.Add(LabeledEdit1.Text);) - увидите красный кружок и строка тоже окрасится красным. Это - точка останова отладки. Далее, запускайте проект кнопкой Run. В этом режиме, дойдя до выполнения отмеченной строки, выполнение прервется и перейдет в пошаговое исполнения по нажатию F8. То есть, строки будут выполнятся по очереди и получив ошибку, вы точно будете знать где она возникла.


15 лет назад

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

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

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