Форум: "Начинающим";
Текущий архив: 2011.12.04;
Скачать: [xml.tar.bz2];
ВнизStringgrid Найти похожие ветки
← →
Максон © (2011-03-29 12:49) [0]Здравствуйте.
Столкнулся с такой проблемой. На форме 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.
← →
Virgo_Style © (2011-03-29 13:11) [1]
> добавлялась новая строка.strngrd1.RowCount:=0;
вот здесь что происходит, как думаешь?
← →
Максон © (2011-03-29 13:17) [2]
strngrd1.RowCount:=0;
видимо обнуление таблицы?
← →
И. Павел © (2011-03-29 13:18) [3]> for i:=1 to (strngrd1.RowCount+1) do
Тут будет выход за границы StringGrid.
← →
И. Павел © (2011-03-29 13:22) [4]> Exit;
нет, похоже что выхода за границы StringGrid все же не будет :)
← →
И. Павел © (2011-03-29 13:24) [5]Наверное, нужно как-то так:
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:28) [6]> Максон © (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 16:13) [7]Спасибо огромное, пригодилось, буду дальше воять свое приложение.
← →
julia-julia © (2011-05-09 07:21) [8]Помогите, пожалуйста. Нужно Заполнить ячейки 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;
← →
Anatoly Podgoretsky © (2011-05-09 08:55) [9]> 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 09:38) [10]Хм... Я, конечно, попробую, но все таки при возможности не хотела бы менять дизайн. А про сведение к свойствам класса можно узнать поподробней:)
← →
Anatoly Podgoretsky © (2011-05-09 10:19) [11]> julia-julia (09.05.2011 09:38:10) [10]
В классе определить свойства или поля и после ввода в них записывать, лучше
свойства, поскольку они могут быть управляемыми, а выглядеть как поля.
← →
MsGuns © (2011-05-10 13:13) [12]ИМХО, "знает" о том, что добавлять и что надо вообще добавлять, должна та форма, которая собственно и реализует этот ввод.
Поэтому следует, наверное сделать как-то так:
Форма вызывающая (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;
← →
julia-julia © (2011-05-14 18:20) [13]Файл создается в него записываются данные которые я ввожу в 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;
← →
Palladin © (2011-05-14 20:36) [14]прокомментируй каждую строчку и объясни чего ты хочешь
← →
julia-julia © (2011-05-14 23:03) [15]//Записать из 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 23:41) [16]) комментарии - твердая пятерка
теперь вопрос другой ) а Вы вообще знаете что такое - цикл for? )
← →
julia-julia © (2011-05-14 23:54) [17]Цикл с параметром, с шагом изменения счетчика 1
← →
Palladin © (2011-05-15 00:12) [18]то есть он повторяется от 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, так?
какие выводы?
← →
Palladin © (2011-05-15 02:17) [19]надеюсь выводы его не парализовали и парень жив
← →
Германн © (2011-05-15 06:17) [20]
> Palladin © (15.05.11 02:17) [19]
>
> надеюсь выводы его не парализовали и парень жив
Так тут уже два автора засветились. Думаю оба до сих пор живы.
← →
КирилКА (2011-08-13 14:48) [21]Удалено модератором
Примечание: Offtopic
← →
КирилКА (2011-08-13 14:49) [22]Удалено модератором
Примечание: Offtopic
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2011.12.04;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.006 c