在线等 请懂的人帮忙看看

cool2007 2009-04-19 10:59:39
效果是在form1中有一按钮,点击出现form2,而form2有一Timer控制Form2的显示,如下
void __fastcall TForm2::Timer1Timer(TObject *Sender)
{
for (Form2->Height=10;Form2->Height<229; )
{
Form2->Height=Form2->Height+2 ;
}

Timer1->Enabled=false;

}
单个窗体没什么问题,可就是当点按钮的时候提示错误
郁闷
...全文
80 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
僵哥 2009-04-20
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 cool2007 的回复:]
大哥,代码已经试过了,很好,不过我听迷惑,如果能指点一二将不胜感激
[/Quote]
void __fastcall TForm2::Timer1Timer(TObject *Sender)
{
//Timer1Timer可以直接调也可以当作其它事件的处理例程,
//但是这里只关心参数值为Timer的,相比之下可以在一定范围内做出简单检查

//InheritsFrom用于检查是否继承自某某类型,当然在这里可以直接写上IsClass
if(!Sender->InheritsFrom(__classid(TTimer)))return;

//在楼主的代码当中直接访问了Form2这个全局变量,当Form2所指向的实例被销毁之后,就可能变成一个野指针,
//或者说TForm2类被创建新的时候之后,仍然访问了Unit2当中全局变量所指向的那个,这对于多个实例存在时,显然不是需要的.
//使用this指针,则可以明确地指向当前的这个窗体实例本身.
for (this->Height=10;this->Height <229; )
{
this->Height=this->Height+2 ;
}

//通过dynamic_cast将参数TObject *Sender转换为TTimer,并使以相应的操作
dynamic_cast<TTimer*>(Sender)->Enabled=false;

}
shadowstar 2009-04-20
  • 打赏
  • 举报
回复
代码可以写的简单一点,也看得懂。
void __fastcall TForm2::Timer1Timer(TObject *Sender) 
{
for (Height = 10; Height < 229; Height = Height + 2)
;
Timer1->Enabled=false;
}
mgsg 2009-04-20
  • 打赏
  • 举报
回复
变量生命周期问题。
cool2007 2009-04-19
  • 打赏
  • 举报
回复
大哥,代码已经试过了,很好,不过我听迷惑,如果能指点一二将不胜感激
僵哥 2009-04-19
  • 打赏
  • 举报
回复
void __fastcall TForm2::Timer1Timer(TObject *Sender) 
{
if(!Sender->InheritsFrom(__classid(TTimer)))return;
for (this->Height=10;this->Height <229; )
{
this->Height=this->Height+2 ;
}

dynamic_cast<TTimer*>(Sender)->Enabled=false;

}

13,825

社区成员

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

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