Delphi-Help

Главная Статьи Таблица строк (StringGrid) Меняем строки в TStringGrid

Меняем строки в TStringGrid

Оцените материал
(0 голосов)


Меняем строки в TStringGrid

Итак, в этой статье хотел бы поговорить как поменять строки местами в TStringGrid. Задача очень простая, но может кому-то для «лабораторок» пригодится, так многим эта задача не будет совсем тяжелой. Давайте посмотрим так, TStringGrid - этот та же самая матрица, следовательно этот метод можно применять и для нашей матрицы. Сейчас мы это все пройдем просто визуально. Смысл всего это – то, что мы работаем с определенной строкой, то есть мы знаем какие строки мы будем между собой менять. Сейчас я просто поменяю строки 1 со 2-й местами, ну а в следующей статье расскажу как поменять строку с максимальным элементом матрицы со строкой с минимальным элементом матрицы (что также не сложно). У меня на форме следующие компоненты

  • TStringGrid
  • TButton

Можете установить на форму еще TEdit - для изменения размера массива, но думаю не стоит, не в этом сейчас смысл.

Также не забудьте в свойстве TStringGrid - Options-goEditing - поставить в значение True, иначе Вы не сможете заполнить TStringGrid.

Давайте вернемся к нашей задачи, у нас есть две строки – 1 и 2 строка, которые необходимо поменять между собой. Если мы начнем менять, то значения одной строки будут заменяться, то есть стираться, удаляться говорите как думаете, а если они удаляются, то мы не сможем поставить эти значения в другую строку, следовательно замена не произойдет, просто получиться 2-е одинаковые у нас строки. Для этого нам нужен «посредник«, то есть дополнительный массив, одномерный массив. В него мы запишем все значения первой строки, затем первой строке присвоим значения второй строки, а уже второй строке мы присвоим значения нашего «посредника«, то есть нашего дополнительного массива (а у него записаны значения первой строки, следовательно замена сработает). На Delphi это будет выглядеть примерно так

procedure TForm1.Button1Click(Sender: TObject);
var
 i,j,k:integer;
 a:array[1..100] of integer;
begin
   try
    k:=1;
    for i:=0 to StringGrid1.ColCount-1 do
     begin
      a[k]:=StrToInt(StringGrid1.Cells[i,0]);
      inc(k);
     end;
    for i:=0 to StringGrid1.ColCount-1 do
     begin
      StringGrid1.Cells[i,0]:=StringGrid1.Cells[i,1];
      StringGrid1.Cells[i,1]:=IntToStr(a[i+1]);
     end;
   except
    on e:Exception do
   end;
end;

Как видите все, что я описал выше словами реализовал здесь, как видите ничего сложного, жду Вас в следующей статье по данному вопросу.

Авторизация



Счетчики