在c ++ builder中向StringGrid添加控件

时间:2013-02-03 21:43:09

标签: c++ c++builder

我想在c ++ builder中为checkboxGrid的每一行添加复选框。据我所知,特定列的每个单元都不可能有自己的子控件。那我该怎么办

for (int i = 1; i < this->StringGrid1->RowCount; i++) {
    this->StringGrid1->Cells[0][i]=IntToStr(i);
    TCheckBox *l=new TCheckBox(this->StringGrid1);
    l->Name="label"+IntToStr(i);
    l->Caption="OK";
    l->Visible=true;

}

1 个答案:

答案 0 :(得分:2)

技术上可以将子控件放在TStringGrid中(您的示例代码只缺少l->Parent = StringGrid1分配),但管理此类控件并不容易,特别是如果网格是可滚动的。

更好的解决方案是通过切换到TDrawGrid并使用其OnDrawCell事件来自主绘制网格,以便您可以调用Win32 API DrawFrameControl()或{{3}函数将复选框的图像绘制到网格上。然后,您可以使用单独的数组/列表来跟踪“状态”复选框,并使用网格的OnMouse...事件根据需要切换这些“状态”,每当复选框时调用网格的Invalidate()方法更改“状态”,以便您可以触发重绘以显示它。但是如果你走这条路,你最好切换到虚拟ListView或虚拟TreeView,而不是使用网格。

另一种解决方案是切换到将TListView属性设置为ViewStyle模式且其vsReport属性设置为true的CheckBoxes