关于非auto-create 的FORM 里调用Refresh 出错的问题

pmes 2002-09-08 09:43:30
有Form1 和 Form2 其中
Form1 为main form,
Form2 为Available (在porject option 里的FORM 那里设置)

Form1里放一个Button click 事件如下:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
TForm2 *t=new TForm2(Application);
t->ShowModal();
delete t;
}


Form2里放又放一个Button click 事件如下:
void __fastcall TForm2::Button1Click(TObject *Sender)
{
Form2->Refresh();
}

运行程序当点击Form2的button 里就会出错,我试过如果把 Form2也设为auto-create就没出错

请问各位高手,如何调用非auto-create的FORM 的refresh() ?






...全文
44 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
aawolf 2002-09-08
  • 打赏
  • 举报
回复
楼上,Form2是在哪里定义的?
Behard 2002-09-08
  • 打赏
  • 举报
回复
如果贴主就是想使用Form2->Refresh();这样的写法,那么创建Form2时这样写
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Form2 = new TForm2(Application); //这样Form2就不是非法的指针了
Form2->ShowModal();
delete Form2;
}

????
xuexi
pmes 2002-09-08
  • 打赏
  • 举报
回复
问题说得很清楚
hailulu_wang 2002-09-08
  • 打赏
  • 举报
回复
我试过了,把Form2->Refresh();改成this->Refresh();就可以了
jishiping 2002-09-08
  • 打赏
  • 举报
回复
如果贴主就是想使用Form2->Refresh();这样的写法,那么创建Form2时这样写
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Form2 = new TForm2(Application); //这样Form2就不是非法的指针了
Form2->ShowModal();
delete Form2;
}
jishiping 2002-09-08
  • 打赏
  • 举报
回复
这样写就可以了。
void __fastcall TForm2::Button1Click(TObject *Sender)
{
Refresh();
}
BCB的一个害人的地方,就是对每个Form都自动定义了一个全局变量(比如这
儿的Form2),如果Form不是自动创建的话,那么这个全局变量是一个非法的
指针,访问这个非法的指针当然会出错了。另外,我看到太多的人,明明是使
用这个Form的属性/变量/函数,可是偏偏喜欢在前面加上一个全局指针来访问
(就像这儿),这是干嘛呀?说来说去,都怪BCB。如果BCB不自动设定一个全
局变量的话,也就不会有这样的问题了。但是我从一开始用BCB,就没有这样
的写法。说来说去,也有贴主对C++不熟的原因,如果对C++熟了,就不会有这
样的写法。
pmes 2002-09-08
  • 打赏
  • 举报
回复
非常巧合,我这个问题与
"一个程序有3个窗体 form1是主窗体,form2,form3我设成Aiavible form...... (shanlin ) " 是一样的问题!有人说是需要一个全局的FORM指针,那具体怎样做?

13,873

社区成员

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

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