1

C++ ビルダーで、stringGrid の各行にチェックボックスを追加したいと考えています。私が知っているように、特定の列の各セルが独自の子コントロールを持つことはできません。だから私は何をすべきか

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;

}
4

1 に答える 1

2

子コントロールを に配置することは技術的TStringGridに可能ですが (例のコードにはl->Parent = StringGrid1割り当てがありません)、特にグリッドがスクロール可能な場合、そのようなコントロールを管理するのは簡単ではありません。

TDrawGridより良い解決策は、に切り替えてそのイベントを使用することにより、所有者がグリッドを描画するOnDrawCellことです。これにより、Win32 APIDrawFrameControl()またはDrawThemeBackground()関数を呼び出してチェックボックスの画像をグリッドに描画できます。次に、別の配列/リストを使用してチェックボックスの「状態」を追跡し、OnMouse...必要に応じてグリッドのイベントを使用してそれらの「状態」を切り替えInvalidate()、チェックボックスが「状態」を変更するたびにグリッドのメソッドを呼び出して、再描画をトリガーできるようにします。表示します。ただし、この方法を使用する場合は、グリッドを使用する代わりに、仮想 ListView または仮想 TreeView に切り替えることをお勧めします。

別の解決策は、プロパティがmode に設定され、そのプロパティが true に設定されTListViewているに切り替えることです。ViewStylevsReportCheckBoxes

于 2013-02-03T23:12:15.933 に答える