我试图通过编程方式使用下面的代码从它的父容器中删除选定的组件(我可能不正确地使用found,但这不是问题,建议是欢迎的):
void __fastcall TScrollControlsListContainer::RemoveItem(TWinControl* ctrl)
{
// find control in vector containing TWinControl(s)
std::vector<FWinControl*>::iterator found = std::find_if(FWinControls.begin(), FWinControls.end(), IsCtrl(ctrl));
if(found != FWinControls.end())
{
Components->RemoveComponent(dynamic_cast<TComponent*>(found));
//[bcc32 Error] ScrollControlsListContainer.cpp(208): E2193 Too few parameters in call to '_fastcall TComponent::GetComponent(int)' Full parser context
FWinControls.erase(found);
}
}我对错误感到困惑,因为根据下面的帮助文件示例,只需要一个参数:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
int I;
TComponent *Temp;
Memo1->Lines->Add("Components removed: ");
Form2->Memo1->Lines->Add("Components added: ");
for (I = ComponentCount - 1; I >= 0; I--)
{
Temp = Components[I];
// Move only the components that are not controls.
if (dynamic_cast<TControl *>(Temp) == NULL)
{
RemoveComponent(Temp);
Memo1->Lines->Add(Temp->Name);
Form2->InsertComponent(Temp);
Form2->Memo1->Lines->Add(Temp->Name);
}
}
}我在这里错过了什么?
发布于 2022-09-06 22:42:19
TScrollControlsListContainer是从TScrollBox派生的。
Components->RemoveComponent(dynamic_cast(found));//
我使用上述代码计算的错误是因为我在RemoveComponent之前使用了组件->,一旦我删除了它,错误就消失了,找到了雷米建议的,并且我计算出不能以这种方式使用,因为它没有指向我想要删除的实际控件。
以下代码工作正常
void __fastcall TScrollControlsListContainer::RemoveItem(TWinControl* ctrl)
{
std::vector<FWinControl*>::iterator found = std::find_if(FWinControls.begin(), FWinControls.end(), IsCtrl(ctrl));
if(found != FWinControls.end())
{
int i = std::distance(FWinControls.begin(), found);
RemoveComponent(FWinControls[i]->b);
delete FWinControls[i]->b;
FWinControls.erase(found);
}
}https://stackoverflow.com/questions/73616043
复制相似问题