请教问题:StirngGrid1->Objects[][]

老白猫 2012-03-30 04:08:13
前一阵搞明白了objects这个属性。。 今天突然发现
dynamic_cast<TStringRow*>(StringGrid1->Objects[0][2]) 当在第三行绑定一个对象实例时,没问题
dynamic_cast<TStringRow*>(StringGrid1->Objects[0][3]) 第四行也对应了一个,然后悲剧了 因为第二行的指向的数据没了,像是没存储一样,而且统统变为第四行的值了,就是说这两行对应了相同的实例
然后再往底下同理,以最新一行的代码执行后效果为统一;求解哪里搞错了,其他的数据怎么没有了?我还要留着用呢
...全文
80 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
老白猫 2012-03-31
  • 打赏
  • 举报
回复
extern PACKAGE int roow;
老白猫 2012-03-31
  • 打赏
  • 举报
回复

void __fastcall TForm2::BitBtn1Click(TObject *Sender)
{
wa = edit->Text ;
wb=…;
wc =…;
wd = …;
we =…;

Form1>RowObject();
ShowMessage(roow);
Form2->Close();
}

解释:form2窗体点击确定按钮,wa wb..是工程里的全局变量-- extern PACKAGE AnsiString wa; ...
调用form1的函数:

__fastcall TForm1::RowObject()
{
StringRow->a= wa;
StringRow->b = wb;
StringRow->c = wc;
StringRow->d = wd;
StringRow->e = we;

StringGrid1->Objects [1][roow] = (TObject*) StringRow;

for(int i = 2;i<StringGrid1->RowCount ;i++)
if(i == roow) //roow是指当前的哪一行
dynamic_cast<TStringRow*>(StringGrid1->Objects[1][i])->a= StringRow->a;
}

解释:在form1 .h里写class TStringRow : public TObject{ public AnsiString a ....};
在form1 .cpp里包含各种头文件下面写上 -- TStringRow *StringRow = new TStringRow;
接着如代码绑定对象 for循环增加数据吧


void __fastcall TForm1::Button1Click(TObject *Sender)
{
ShowMessage(dynamic_cast<TStringRow*>(StringGrid1->Objects[1][2])->a);
ShowMessage(dynamic_cast<TStringRow*>(StringGrid1->Objects[1][3)->a);
ShowMessage(dynamic_cast<TStringRow*>(StringGrid1->Objects[1][4])->a);
ShowMessage(dynamic_cast<TStringRow*>(StringGrid1->Objects[1][5])->a);
}

用click事件显示数据值,发现不管roow值为多少,显示的全部是一样的:roow == 2 时,假设数据为m,显示Objects[1][2])->a = m;当roow改变为3时,设定数据位n,然后Objects[1][2])->a的值 = Objects[1][3])->a的值 = n


这么个过程
缘中人 2012-03-31
  • 打赏
  • 举报
回复
怎么赋值的,估计赋值的时候有问题,指针对象new
老白猫 2012-03-31
  • 打赏
  • 举报
回复


老白猫 2012-03-31
  • 打赏
  • 举报
回复
惭愧啊 基础不行 知道哪里的错了

结贴了 继续搞

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧