Консультация № 174324
17.11.2009, 16:49
35.00 руб.
0 1 1
Здравствуйте. Во первых большое спасибо за помощь в предыдущих проблемах. (вопросы №174119, 174289) Вопрос у меня по той же задаче. Пишется программа по работе с данными о сотрудниках. Имеется класс для обработки сведений о сотрудниках (Tperson=class) , структура данных типа запись
Sotrud=record
Famil:str;
Dolgn:str;
Zarpl:real;
данные хранятся в динамическом массиве Tdata=array of sotrud; При редактировании сведений о сотрудниках выводится новая форма. Нужно создать обработчик событий при нажатии кнопки ОК . Этот метод должен вывести в окно Edit1 второй формы выбранную в окне combobox1 первой формы фамилию и удалить её из массива. Для выполнения этого события у нас есть методы класса Load_name (функция чтения фамилии сотрудника) и Del_Data.
Проконсультируйте , пожалуйста , правильно ли написана процедура
Procedure TForm2.BitBtn1Click (Sender:TObject);
Var i: integer;
Begin
Edit1.Clear;
Label1.Caption:= ‘Номер сотрудника по списку ‘ + IntToStr(Form1.Combobox1.ItemIndex+1);
Edit1.Text := Form1.Combobox1.Items[Form1.Combobox1.ItemIndex];
For i:=0 to pers.Dlina -1 do
If Edit1.Text = pers.Load_name(i) then
Pers.Del_Data(i);
end;

Обсуждение

Неизвестный
17.11.2009, 17:07
общий
это ответ
Здравствуйте, Vlad9240.
Вроде процедура написана правильно. Но я бы добавил некоторые проверки и улучшения.
1. Проверка, что в Form1.Combobox1 что-то выбрано
2. После удаления персоны продолжать цикл нет смысла, если имена персон не повторяются
Смотрите вложение.

Приложение:
Procedure TForm2.BitBtn1Click (Sender:TObject);
Var i: integer;
Begin
if Form1.Combobox1.ItemIndex=-1 then
begin
ShowMessage('Сотрудник не выбран');
Exit;
end;
Label1.Caption:= ‘Номер сотрудника по списку ‘ + IntToStr(Form1.Combobox1.ItemIndex+1);
Edit1.Text := Form1.Combobox1.Items[Form1.Combobox1.ItemIndex];
For i:=0 to pers.Dlina -1 do
If Edit1.Text = pers.Load_name(i) then
begin
Pers.Del_Data(i);
Break;
end
end;
5
Спасибо!
Форма ответа