Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.05.2011, 22:32   #1
Artamos
 
Регистрация: 05.05.2010
Сообщений: 6
Вопрос Очистка сразу нескольких StringGrid

Как очистить нулевую колонку сразу в нескольких таблицах StringGrid? Есть вариант прописать, как указано ниже, но таблиц много, поэтому хотелось бы оптимизировать код программы. Возможно каким-то образом это реализовать без перечисления всех табблик, к примеру с помощью цикла или ещё как-нибудь?
StringGrid1.Cols[i].Clear;
StringGrid2.Cols[i].Clear;
StringGrid3.Cols[i].Clear;
StringGrid4.Cols[i].Clear;
StringGrid5.Cols[i].Clear;
StringGrid6.Cols[i].Clear;
.....
Artamos вне форума Ответить с цитированием
Старый 09.05.2011, 22:47   #2
Tenebor
Пользователь
 
Аватар для Tenebor
 
Регистрация: 07.03.2011
Сообщений: 19
По умолчанию

Цитата:
Сообщение от Artamos Посмотреть сообщение
Как очистить нулевую колонку сразу в нескольких таблицах StringGrid? Есть вариант прописать, как указано ниже, но таблиц много, поэтому хотелось бы оптимизировать код программы. Возможно каким-то образом это реализовать без перечисления всех табблик, к примеру с помощью цикла или ещё как-нибудь?
StringGrid1.Cols[i].Clear;
StringGrid2.Cols[i].Clear;
StringGrid3.Cols[i].Clear;
StringGrid4.Cols[i].Clear;
StringGrid5.Cols[i].Clear;
StringGrid6.Cols[i].Clear;
.....
Я бы сделал вот так :

for i:=0 to a do
for j:=0 to a do begin
if Form2.StringGrid1.cells[i,j]<>'' then
form2.stringGrid1.cells[i,j]:='';

if Form2.StringGrid2.cells[i,j]<>'' then
form2.stringGrid2.cells[i,j]:='';

................................... ......................
................................... ....................
end;

Это очистит все StringGrid за 1 раз. Может и плохой стиль, но работает
Меня не интересует, почему «нет», меня интересует, что нужно сделать для того, чтобы было «да»!
Tenebor вне форума Ответить с цитированием
Старый 09.05.2011, 22:57   #3
Artamos
 
Регистрация: 05.05.2010
Сообщений: 6
По умолчанию

Цитата:
Сообщение от Tenebor Посмотреть сообщение
Я бы сделал вот так :

for i:=0 to a do
for j:=0 to a do begin
if Form2.StringGrid1.cells[i,j]<>'' then
form2.stringGrid1.cells[i,j]:='';

if Form2.StringGrid2.cells[i,j]<>'' then
form2.stringGrid2.cells[i,j]:='';

................................... ......................
................................... ....................
end;

Это очистит все StringGrid за 1 раз. Может и плохой стиль, но работает
Если я правильно понял, то в вашем методе используется цикл полной очистки таблиц с перечислением условий для каждой отдельной таблицы, а у меня таблиц много, но состоят они всего лишь из 1 столбца и нескольких строк каждая, поэтому мой вариант будет гораздо проще
Мне узнать как в цикл загнать саму форму stringgrid1-20...
Artamos вне форума Ответить с цитированием
Старый 09.05.2011, 23:44   #4
Tenebor
Пользователь
 
Аватар для Tenebor
 
Регистрация: 07.03.2011
Сообщений: 19
По умолчанию

Цитата:
Сообщение от Artamos Посмотреть сообщение
Если я правильно понял, то в вашем методе используется цикл полной очистки таблиц с перечислением условий для каждой отдельной таблицы
да

Цитата:
Сообщение от Artamos Посмотреть сообщение
а у меня таблиц много, но состоят они всего лишь из 1 столбца и нескольких строк каждая, поэтому мой вариант будет гораздо проще
Проще не всегда значит эфективней, мой вариант более так сказать "шире" в использовании

Цитата:
Сообщение от Artamos Посмотреть сообщение
Мне узнать как в цикл загнать саму форму stringgrid1-20...
Что Вы имеете в виду ?
Все StringGrid имеют одинаковый размер ?
Меня не интересует, почему «нет», меня интересует, что нужно сделать для того, чтобы было «да»!

Последний раз редактировалось Tenebor; 09.05.2011 в 23:57.
Tenebor вне форума Ответить с цитированием
Старый 10.05.2011, 07:21   #5
Nemez
Пользователь
 
Аватар для Nemez
 
Регистрация: 11.02.2008
Сообщений: 69
По умолчанию

Цитата:
Сообщение от Artamos Посмотреть сообщение
Как очистить нулевую колонку сразу в нескольких таблицах StringGrid? Есть вариант прописать, как указано ниже, но таблиц много, поэтому хотелось бы оптимизировать код программы. Возможно каким-то образом это реализовать без перечисления всех табблик, к примеру с помощью цикла или ещё как-нибудь?
StringGrid1.Cols[i].Clear;
StringGrid2.Cols[i].Clear;
StringGrid3.Cols[i].Clear;
StringGrid4.Cols[i].Clear;
StringGrid5.Cols[i].Clear;
StringGrid6.Cols[i].Clear;
.....
Вот както так

n:=6;//колич. стрингридоф
for i:=1 to n do
(FindComponent('StringGrid' + IntToStr(i)) as TStringGrid).Cols[0].Clear;
Nemez вне форума Ответить с цитированием
Старый 10.05.2011, 08:36   #6
Tenebor
Пользователь
 
Аватар для Tenebor
 
Регистрация: 07.03.2011
Сообщений: 19
По умолчанию

Цитата:
Сообщение от Artamos Посмотреть сообщение
Как очистить нулевую колонку сразу в нескольких таблицах StringGrid?
Мда

for i:=0 to a do
for j:=0 to a do
//if (i=0) or (j=0) then --и колонки и сроки нулевые очищает
if i=0 then // только нулевую колонку
begin
if Form2.StringGrid1.cells[i,j]<>'' then
form2.stringGrid1.cells[i,j]:='';
if Form2.StringGrid2.cells[i,j]<>'' then
form2.stringGrid2.cells[i,j]:='';
................................... ................
................................... ..............
end
else break;

это когда все Stringgrid одного размера
Меня не интересует, почему «нет», меня интересует, что нужно сделать для того, чтобы было «да»!

Последний раз редактировалось Tenebor; 10.05.2011 в 08:55.
Tenebor вне форума Ответить с цитированием
Старый 12.05.2011, 20:35   #7
xrob
Форумчанин
 
Регистрация: 18.10.2010
Сообщений: 419
По умолчанию

Код:
procedure ClearTable(var table:TStringGrid);
begin    
// очищаем нулевую ячейку в каждой строке таблицы; 
for i:=0 to Table.Rows-1 do table.cells[0,i]:='';
end;
а потом где надо вызываем эту процедуру;
Код:
ClearTable(StringGrid1);
далее, что значит много таблиц?
как они появились?
если они создаются динамически, то я не знаю другого способа
как создавать новые таблицы в array of TStringGrid;

а если вы их все создавали вручную на этапе разработки то
тогда либо создать процедуру для очистки всех созданых таблиц,
в которой вызвать процедуру ClearTable для каждой таблицы,
вручную прописывая параметр процедуры:
Код:
procedure ClearAllTables;
begin 
ClearTable(StringGrid1); 
ClearTable(StringGrid2); 
ClearTable(StringGrid3); 
ClearTable(StringGrid4);
end;
либо при создании таблицы добавлять ее в array of TStringGrid,
а потом в цикле пробегаться по этому массиву:
Код:
Tables:array of TStringGrid;  

procedure ClearAllTables;
begin 
for i:=0 to Length(Tables)-1 do ClearTable(Tables[i]);
end;
добавление таблицы в массив:
Код:
Tables[0]:=TStringGrid.create; // динамическое создание; 
Tables[0]:=Table; // добавление таблицы Table в массив на этапе разработки.
p.s.
в описании процедур я не прописал раздел var,
надеюсь разберетесь что нужно сделать.
xrob вне форума Ответить с цитированием
Старый 13.05.2011, 13:58   #8
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Код:
for j:=0 to form1.controlcount-1 do
  if form1.controls[j] is TstringGrid then
  (form1.controls[j] as TstringGrid).cols(10.clear;
очистит ВСЕ таблицы (первые колонки) размещенные на форме (form1)
Код:
for j:=0 to panel1.controlcount-1 do
  if panel1.controls[j] is TstringGrid then
  (form1.controls[j] as TstringGrid).cols(10.clear;
очистит ВСЕ таблицы (первые колонки) размещенные на указанной панели (panel1)

есть еще components[] и componentcount
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Установка нескольких атрибутов сразу Shouldercannon Общие вопросы Delphi 7 01.05.2011 22:49
StringGrid - выделение нескольких ячеек 6AZblJlb Общие вопросы Delphi 3 26.11.2010 22:48
заполнение сразу нескольких однотипных значений Domanoff БД в Delphi 2 22.04.2010 13:37
Возможно ли изменить колонтитул нескольких документов сразу Grant84 Microsoft Office Word 2 14.04.2010 18:41
Создание сразу нескольких txt файлов Nice42ru Помощь студентам 11 11.02.2010 18:35