C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Удаление строки из StringGrid
Serg
Отправлено: 02.07.2003, 15:15


Не зарегистрирован







Суть вопроса:

есть объект TStringGrid, необходимо удалить из него строку с номером ARow.

Подскажите пожалуйста, как правильно применить DeleteRow(long ARow)). sad.gif
Guest
Отправлено: 02.07.2003, 22:39


Не зарегистрирован







Тебе надо сделать так: сдвинуть все строки вверх на 1, а поледнюю удалить. Ето в теории.

Пример:

for (int i=ARow; iRowCount; i++)
SG1->Cells[0][i]=SG1->Cells[1][i+1];
SG1->RowCount-=1;

P.S.
SG1 ето StringGrid1.
Serg
Отправлено: 03.07.2003, 07:17


Не зарегистрирован







Уж очень хочеца DeleteRow применить...
Пряма наваждение какое-то...

??? smile.gif
Георгий
Отправлено: 03.07.2003, 12:53


Почетный железнодорожник

Группа: Модератор
Сообщений: 874



DeleteRow — это protected метод — и простым смертным он не доступен.
Хотя причиты скрытия его не совсем ясны:
CODE
class MyStringGrid:public TStringGrid
     {
public:
      __fastcall virtual MyStringGrid(Classes::TComponent* AOwner):TStringGrid(AOwner){};
      void __fastcall DeleteRow(int a){return TStringGrid::DeleteRow(a);};
     };
static MyStringGrid*sg;
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
sg=new MyStringGrid(this);
sg->Parent=this;
int i,j;
for (i=0;i<sg->ColCount;i++)
   for (j=0;j<sg->RowCount;j++)
       sg->Cells[i][j]=AnsiString(i)+AnsiString(j);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
sg->DeleteRow(2);
}

и этот код прекрасно работает

Вернуться в Вопросы программирования в C++Builder