![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Stringgrid [D7, 2000]
Максон © (2011-03-29 12:49:00)Здравствуйте.
Столкнулся с такой проблемой. На форме 3 edit-a, 1 Combobox, 1stringGrid, 1button.
Суть вопроса: При каждом нажатии на кнопку данные из edit,combobox отображались в Stringgrid и добавлялась новая строка.
Увы, у меня так не получается.
Подскажите, пожалуйста
procedure TForm2.addbtnClick(Sender: TObject);
var
i:Integer;
begin
strngrd1.RowCount:=0;
strngrd1.RowCount:=strngrd1.RowCount+1; //Добавление строки
for i:=1 to (strngrd1.RowCount+1) do
begin
if strngrd1.Cells[0,i]='' then
begin
strngrd1.Cells[1,i]:=edt1.Text;
strngrd1.Cells[2,i]:=edt2.Text;
strngrd1.Cells[3,i]:=edt3.Text;
strngrd1.Cells[4,i]:=cbb1.Text;
Exit;
end;
end;
end;
end.
КирилКА (2011-08-13 14:49:00) [1]Удалено модератором
Примечание: Offtopic
КирилКА (2011-08-13 14:48:00) [2]Удалено модератором
Примечание: Offtopic
Германн (2011-05-15 06:17:00) [3]
> Palladin © (15.05.11 02:17) [19]
>
> надеюсь выводы его не парализовали и парень жив
Так тут уже два автора засветились. Думаю оба до сих пор живы.
Palladin (2011-05-15 02:17:00) [4]надеюсь выводы его не парализовали и парень жив
Palladin (2011-05-15 00:12:00) [5]то есть он повторяется от 0 до, скажем, 4, то есть пять раз, так?
от же самое значит что
StringGrid1.Cells[0,I+1]:=Edit1.Text;
StringGrid1.Cells[1,I+1]:=MaskEdit1.Text;
StringGrid1.Cells[2,I+1]:=MaskEdit2.Text;
StringGrid1.Cells[3,I+1]:=MaskEdit3.Text;
выполнится тоже 5 раз, и каждый раз с новым значением I, так?
какие выводы?
julia-julia (2011-05-14 23:54:00) [6]Цикл с параметром, с шагом изменения счетчика 1
Palladin (2011-05-14 23:41:00) [7]) комментарии - твердая пятерка
теперь вопрос другой ) а Вы вообще знаете что такое - цикл for? )
julia-julia (2011-05-14 23:03:00) [8]//Записать из StringGrid в файл
procedure TForm1.BitBtn1Click(Sender: TObject);
Var I : Byte;//Номер столбца
F : TextFile;// Текстовый файл
S : String;//Строка текстового файла
begin
StringGrid1.RowCount:=StringGrid1.RowCount+1;//Создаем строку в StringGrid
AssignFile(F, 'Poezd.txt');//Установили связь с файлом
Rewrite(F);//Перезаписали файл
For I := 0 to StringGrid1.RowCount - 1 do //Проходим по всем строкам StringGrid
Begin
// заполняем ячейки с помощь Edit и MaskEdit (соответственно)
StringGrid1.Cells[0,I+1]:=Edit1.Text;
StringGrid1.Cells[1,I+1]:=MaskEdit1.Text;
StringGrid1.Cells[2,I+1]:=MaskEdit2.Text;
StringGrid1.Cells[3,I+1]:=MaskEdit3.Text;
S := StringGrid1.Cells[0,I] +' '+StringGrid1.Cells[1,I]+' '
+StringGrid1.Cells[2,I]+' '+StringGrid1.Cells[3,I];//Преобразуем данные
//из StringGrig в файл
Writeln(F,S)//Переписываем каждую строку в файл
end;
CloseFile(F) //Закрываем файл
end;
Palladin (2011-05-14 20:36:00) [9]прокомментируй каждую строчку и объясни чего ты хочешь
julia-julia (2011-05-14 18:20:00) [10]Файл создается в него записываются данные которые я ввожу в Edit и MaskEdit, но почему то только первые, если я введу другие то у меня появиться новая строка с новыми данными как и должно быть, но при этом еще и старые данные заменятся на новые. Где косяк опять у меня, посмотрите, пожалуйста.
procedure TForm1.BitBtn1Click(Sender: TObject);
//добавление записи из StringGrid в файлPoezd.txt
Var I : Byte;
F : TextFile;
S : String;
begin
StringGrid1.RowCount:=StringGrid1.RowCount+1;
AssignFile(F, 'Poezd.txt');
Rewrite(F);
For I := 0 to StringGrid1.RowCount - 1 do
Begin
StringGrid1.Cells[0,I+1]:=Edit1.Text;
StringGrid1.Cells[1,I+1]:=MaskEdit1.Text;
StringGrid1.Cells[2,I+1]:=MaskEdit2.Text;
StringGrid1.Cells[3,I+1]:=MaskEdit3.Text;
S := StringGrid1.Cells[0,I] +' '+StringGrid1.Cells[1,I]+' '+StringGrid1.Cells[2,I]+' '+StringGrid1.Cells[3,I];
Writeln(F,S)
end;
CloseFile(F)
end;
MsGuns (2011-05-10 13:13:00) [11]ИМХО, "знает" о том, что добавлять и что надо вообще добавлять, должна та форма, которая собственно и реализует этот ввод.
Поэтому следует, наверное сделать как-то так:
Форма вызывающая (Form1)
procedure TForm1.BitBtn1Click(Sender: TObject);
var y: integer;
begin
with TForm2.Create(Self) do
begin
sGrid := stringgrid1;
iRow := -1; // Добавление в конец
ShowModal;
Free;
end;
end;
Форма с вводом:
TForm2 class (TForm)
private
procedure ButtonOkClick(Sender: TObject);
...
public
sGrid: TStringGrid;
iRow: unteger;
...
procedure TForm2.ButtonOkClick(Sender: TObject);
var
cRow: integer;
begin
cRow := iRow;
if cRow<0 then
begin // Добавить новую строку в конец сетки
sGrid.RowCount := sGrid.RowCount + 1;
cRow := sGrid.RowCount - 1;
sGrid.Row := cRow; // Сделать добавленную строку текущей и видимой
end;
sGrid.Cells[1,cRow]:=Edit1.Text;
sGrid.Cells[2,cRow]:=MaskEdit2.Text;
sGrid.Cells[3,cRow]:=MaskEdit3.Text;
sGrid.Cells[4,cRow]:=MaskEdit4.Text;
Close;
end;
Anatoly Podgoretsky (2011-05-09 10:19:00) [12]> julia-julia (09.05.2011 09:38:10) [10]
В классе определить свойства или поля и после ввода в них записывать, лучше
свойства, поскольку они могут быть управляемыми, а выглядеть как поля.
julia-julia (2011-05-09 09:38:00) [13]Хм... Я, конечно, попробую, но все таки при возможности не хотела бы менять дизайн. А про сведение к свойствам класса можно узнать поподробней:)
Anatoly Podgoretsky (2011-05-09 08:55:00) [14]> julia-julia (09.05.2011 07:21:08) [8]
Form1.StringGrid1.Cells[1,y]:=Form2.Edit1.Text;
Form1.StringGrid1.Cells[2,y]:=Form3.MaskEdit2.Text;
Form1.StringGrid1.Cells[2,y]:=Form4.MaskEdit3.Text;
Form1.StringGrid1.Cells[4,y]:=Form5.MaskEdit4.Text;
Но это не совсем верный дизайн, зависимый от внешних условий, надо все
свести к одной форме или хотя бы к свойствам класса.
julia-julia (2011-05-09 07:21:00) [15]Помогите, пожалуйста. Нужно Заполнить ячейки StringGrid из Edit и MaskEdit, они расположенны на разных формах
procedure TForm1.BitBtn1Click(Sender: TObject);
var y: integer;
begin
stringgrid1.RowCount:=stringgrid1.RowCount+1;
Form2.ShowModal;
y:=StringGrid1.Row-1;
Form1.StringGrid1.Cells[1,y]:=Form2.Edit1.Text;
Form1.StringGrid1.Cells[2,y]:=Form2.MaskEdit2.Text;
Form1.StringGrid1.Cells[2,y]:=Form2.MaskEdit3.Text;
Form1.StringGrid1.Cells[4,y]:=Form2.MaskEdit4.Text;
end;
Максон (2011-03-29 16:13:00) [16]Спасибо огромное, пригодилось, буду дальше воять свое приложение.
Юрий Зотов (2011-03-29 13:28:00) [17]> Максон © (29.03.11 12:49)
Зачем цикл? Просто заполняем добавленную строку.
procedure TForm2.addbtnClick(Sender: TObject);
var
i:Integer;
begin
strngrd1.RowCount := strngrd1.RowCount+1; // Добавление строки
i := strngrd1.RowCount-1; // Номер новой строки
strngrd1.Cells[1,i]:=edt1.Text;
strngrd1.Cells[2,i]:=edt2.Text;
strngrd1.Cells[3,i]:=edt3.Text;
strngrd1.Cells[4,i]:=cbb1.Text;
end;
И. Павел (2011-03-29 13:24:00) [18]Наверное, нужно как-то так:
procedure TForm2.addbtnClick(Sender: TObject);
begin
strngrd1.RowCount:=strngrd1.RowCount + 1;
strngrd1.Cells[1,strngrd1.RowCount-1]:=edt1.Text;
strngrd1.Cells[2,strngrd1.RowCount-1]:=edt2.Text;
strngrd1.Cells[3,strngrd1.RowCount-1]:=edt3.Text;
strngrd1.Cells[4,strngrd1.RowCount-1]:=cbb1.Text;
end;
И. Павел (2011-03-29 13:22:00) [19]> Exit;
нет, похоже что выхода за границы StringGrid все же не будет :)
И. Павел (2011-03-29 13:18:00) [20]> for i:=1 to (strngrd1.RowCount+1)do
Тут будет выход за границы StringGrid.