我喜欢通过单击按钮来更改 TGridPanel 中的行顺序。Gridpanel 行是动态创建的,并包含一个带有手动停靠表单的面板。表单有自己的编辑组件和带有当前行索引的标签。最好的方法是这样的:
- 通过单击来标记行
- 单击“向上”或“向下”按钮。
- 选定的行向上/向下移动。
- 停靠窗体中行的索引发生变化。
这是我的尝试:
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
GridPanel1->RowCollection->Clear();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BitBtn_StepAddClick(TObject *Sender)
{
GridPanel1->RowCollection->BeginUpdate();
if (GridPanel1->RowCollection->Count > 0)
GridPanel1->Height = GridPanel1->Height + 156;
TRowItem * RowItem = GridPanel1->RowCollection->Add();
RowItem->SizeStyle = ssAbsolute;
RowItem->Value = 156;
TPanel * Panel2 = new TPanel(this);
Panel2->Parent = GridPanel1;
Panel2->Color = clWhite;
Panel2->Name = "Panel" + IntToStr(GridPanel1->RowCollection->Count) + "2";
Panel2->Align = alClient;
Panel2->AlignWithMargins = false;
TForm2 * Form2 = new TForm2(this, GridPanel1->RowCollection->Count);
Form2->ManualDock(Panel2, Panel2, alClient);
Form2->Show();
BitBtn_StepDelete->Enabled = true;
GridPanel1->RowCollection->EndUpdate();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BitBtn_StepDeleteClick(TObject *Sender)
{
// at the moment this button deletes the last row in GridPanel. But it would be fine to select a row by clicking it and delete the selected one.
// After deleting it, the titles of the manually docked forms should change
GridPanel1->RowCollection->BeginUpdate();
GridPanel1->ControlCollection->Delete(GridPanel1->ControlCollection->Count - 1);
GridPanel1->RowCollection->Delete(GridPanel1->RowCollection->Count - 1);
if (GridPanel1->RowCollection->Count > 0)
GridPanel1->Height = GridPanel1->Height - 156;
else
BitBtn_StepDelete->Enabled = false;
GridPanel1->RowCollection->EndUpdate();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BitBtn_StepInsertClick(TObject *Sender)
{
// Select a row by clicking it and then add a new row before
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BitBtn_StepUpClick(TObject *Sender)
{
// Select a row by clicking it and move it up by this button click
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BitBtn_StepDownClick(TObject *Sender)
{
// Select a row by clicking it and move it down by this button click
}
//---------------------------------------------------------------------------
有人有想法吗?