我使用Embarcadero的C ++ Builder进行编程。我创建了一个TImage数组:
TImage *Image[c] ; // c is 5
after that I am creating dynamic Images on an BUTTON CLICK :
for (int i = 0; i < c; i++)
{
Image[i] = new TImage(this);
Image[i]->Parent = BoardItem ; // BoardItem is an Item of an TabControl
Image[i]->Height = 20 ;
Image[i]->Width = 20 ;
Image[i]->Position->X = d ; // d and e are defined in the public var's.
Image[i]->Position->Y = e ;
Image[i]->Bitmap = Icon->Bitmap ; // Icon is an Image on my Formular
}
它运行正常,但Icon-&gt; Bitmap来自数据库,它也正常工作。但是在第二个按钮上单击旧图像不会被删除。因此,每当我再次点击该按钮时,该程序将再创建5个图像,但旧图像仍在那里。
我现在的问题是,如何刷新旧图像?我应该删除旧图像创建然后新图像吗? (我尝试了这个(删除,Free(),删除[]数组,但我总是得到暴力ERROR) 或者我应该刷新旧图像,以防数据库中图像的位图有更新,以及如何?
答案 0 :(得分:0)
你需要两件事:
确保第一次将指针初始化为null:
foreach(var prop in thisItem.GetType().GetProperties())
{
reportBody.AppendLine(string.Format("{0}:{1}" prop.Name, prop.Value));
}
加载新图像时删除旧图像:
TImage* Image[c] = {};
请注意,在空指针上使用delete Image[i];
Image[i] = new TImage(this);
非常安全;它只是没有做任何事情。因此,第一组图像没有任何变化,每个后续的图像会自动清除旧的图像而不是泄漏。
答案 1 :(得分:-1)
@Ben Voigt在这里你得到了我的整个代码,希望你能理解它。每次我想点击按钮时都应该刷新旧图像。要做到这一点,我想删除那个旧箱子后的新箱子。
TImage *Image[20]= {} ;
for (int i = 0; i < c; i++)
{
str = " Hallo "
Image[i] = new TImage(this);
Image[i]->Parent = BoardItem ;
Image[i]->Height = 20 ;
Image[i]->Width = 20 ;
Image[i]->Position->X = d ;
Image[i]->Position->Y = e ;
Image[i]->Bitmap = Icon->Bitmap ;
Image[i]->StyleName = str ;
Image[i]->OnClick = ImageClick ;
d = d + 20 ; // the next Image should be x-Position +20
if (d == 367) { // 367 is the Width of my Formular
d = 7 ; // If it is 367 Position-x is 7 again und Position-y is +20
e = e + 20 ;
}
}