窗口win上有个TEdit控件name是Edit1,为什么从其它窗体上一访问win->Edit1->Text就出问题

阿鹏兄 2003-08-20 02:33:56
错误提示:access violation at adress 004fcc10 in module "myapp.exe".read of address 00000360
...全文
27 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
阿鹏兄 2003-08-21
  • 打赏
  • 举报
回复
freshman2003(秋水长天):
你这个问题最大的可能是访问这个窗体所属控件时,这个窗体还没有建立,解决的办法是,(例:窗体Win包括Edit1控件,Form为访问这个控件的窗体)点击菜单project->forms->auto-create forms 把Win拖到Form前即可,也就是说访问Edit1前,Win必须等于Form创建。
//---------------------------------------------------------------------------

如果那么多窗口都是自动创建,会不会影响速度?还有自动创建的内部机制是怎么处理的?
就是Twin win=new Twind() ?
阿鹏兄 2003-08-21
  • 打赏
  • 举报
回复
windlyzhang(大家共勉) 大侠的写法是不是VC的?我在bcb里没有查到
freshman2003 2003-08-21
  • 打赏
  • 举报
回复
匈牙利命名法。
阿鹏兄 2003-08-21
  • 打赏
  • 举报
回复
为什么bcb的类总是在名字前+'T'?
yesry 2003-08-21
  • 打赏
  • 举报
回复
__fastcall TForm2::TForm2(TComponent* Owner)
: TForm(Owner)
{
Form2=this;
}
//---------------------------------------------------------------------------

freshman2003 2003-08-21
  • 打赏
  • 举报
回复
自动创建一些窗体,在程序关闭前,当然要占用一定的资源,但一般速度不会有多大影响。而new出来的窗体,删除后就不再占用资源了。所以说,如果一个窗体在程序运行期很少使用,你就可以动态创建它,不用时删除即可。至于自动创建的内部机制,不是一句话两话就能说清楚,可参看相关资料。
guanshangming 2003-08-21
  • 打赏
  • 举报
回复
如果窗口多的话就要自已动态创建了,先加入窗口的头文件,
#include "win.h"
然后定义窗口类指针,如
TWin *win = new TWin(this);
然后模态显示或非模态显示,如
win->ShowModal(); //模态
win->Show(); //非模态
最后释放内存,模态常用
delete win;
非模态通常在窗口关闭时释放,如
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
Action = caFree;
}

hzhxxx 2003-08-21
  • 打赏
  • 举报
回复


没有很好的避免全局的 win 野指针情况

delete object;
object = NULL:
JetKingLau 2003-08-20
  • 打赏
  • 举报
回复
加个判断
if( win )
win->Edit1->Text = "...";
zcchm 2003-08-20
  • 打赏
  • 举报
回复
同意楼上,两个窗体的创建顺序不能颠倒的。
freshman2003 2003-08-20
  • 打赏
  • 举报
回复
你这个问题最大的可能是访问这个窗体所属控件时,这个窗体还没有建立,解决的办法是,(例:窗体Win包括Edit1控件,Form为访问这个控件的窗体)点击菜单project->forms->auto-create forms 把Win拖到Form前即可,也就是说访问Edit1前,Win必须等于Form创建。
windlyzhang 2003-08-20
  • 打赏
  • 举报
回复
没有创建窗体win

Twin win=new Twind()

然后再访问
win->Edit1->Text
就行了,

别忘了用完释放掉啊!
guanshangming 2003-08-20
  • 打赏
  • 举报
回复
#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
#include "Unit2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
Label1->Caption = Form2->Edit1->Text;
}
//---------------------------------------------------------------------------

上面这段代码,在菜单Project->Options->Forms中Form2被移到AvaiLabel forms时,才会出现你所说的情况
阿鹏兄 2003-08-20
  • 打赏
  • 举报
回复
不是动态创建的:)
Siney 2003-08-20
  • 打赏
  • 举报
回复
可能win窗体是动态创建的,而你却直接使用了没有构造的win指针

604

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder VCL组件使用和开发
社区管理员
  • VCL组件使用和开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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