动态创建主窗体后,用frmmain.Edit1.text:='hello'会出错,请高手相救!!!(50分)

  • 主题发起人 主题发起人 acjin
  • 开始时间 开始时间
A

acjin

Unregistered / Unconfirmed
GUEST, unregistred user!
application.CreateForm(Tfrmmain,frmmain);
application.ShowMainForm:=true;
在密码校验正确后,我用上面的代码创建主窗体
但是用frmmain.Edit1.text:='hello'会出错
而用 Edit1.text:='hello'则正常
很急的问题,请高手帮忙解决,谢谢谢谢谢谢
 
如果想问为什么,这里就有了.
http://www.delphibbs.com/delphibbs/dispq.asp?lid=718140
 
用 self.edit1.text='hello'试试
 
谢谢各位
我要在一个自定义过程中写语句 Edit1.text:='hello'
按照我以前的经验要写成 frmmain.Edit1.text:='hello'
才能通过编译,可是现在一加上“frmmain.”就报错,很恼人
我刚学,请各位多指教
 
试试这样!
try
if Login.ShowModal=mrOK then
begin
LoginForm.Free;
Application.CreateForm(TMainForm, MainForm);
Application.Run;
end;
finally
Login.Free;
 
在什么地方用的Edit1.Text啊?
 
说清楚点!
 
是不是你在动态创建窗体以前使用了Edit.
 
老大敬业一点好不好?
至少也说下系统报的是什么错呀?!
 
TO:jbas 里面没有解决问题的方法
TO:黑影 在自定义过程中用SELF。一样报错
TO:zhezhe 还是不行

这个EDIT1是在frmmain上的,我定义了一个procedure ,
在这个procedure 中访问EDIT1的TEXT属性,但是如果在EDIT1前面加上mainfrm.后就出错

不知道这样写,清楚了没有?
 
动态建立窗体是不可以用类似于自动建立的窗体那样使用的
比如自动建立的窗体fms里面有一个edit1,那么你就可以在
任何于引用(uses)这个窗体的单元里使用fms.edit1。
可是动态建立的窗体就不可以这样使用fms.edit1这样写。
对于自定义的过程可以写成fms的私有,就可以直接些edit1.text:='l';
比如procedure Tfms.play(Sender: TObject);
这就是一个私有过程要把他写窗体的定义处
 
在创建主窗体后,使用EDIT1的
报错信息为大家很熟悉的: Access violation at address 005041EB
in module 'projectname' ,read of address FFFFFF
 
这一部分是登陆窗体logno
unit logno;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
DBCtrls, StdCtrls, Buttons, Mask,db, ExtCtrls, ToolWin, ComCtrls, XPMenu;

type
TFlogno = class(TForm)
Image1: TImage;
StaticText1: TStaticText;
Bevel1: TBevel;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Edit1: TEdit;
editm: TMaskEdit;
look: TComboBox;
Panel1: TPanel;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
XPMenu1: TXPMenu;
procedure FormCreate(Sender: TObject);
procedure Edit1Exit(Sender: TObject);
procedure Edit1KeyPress(Sender: TObject; var Key: Char);
procedure FormKeyPress(Sender: TObject; var Key: Char);
procedure SpeedButton1Click(Sender: TObject);
procedure SpeedButton2Click(Sender: TObject);
procedure editmKeyPress(Sender: TObject; var Key: Char);
procedure lookChange(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Flogno: TFlogno;
lon:integer;
logno_ok:bool;
implementation

uses mdata, main;



{$R *.DFM}

procedure TFlogno.FormCreate(Sender: TObject);
begin
lon:=0;
main.admme:=9999;
logno_ok:=false;
fmdata.dadm.First;
while not fmdata.dadm.Eof do
begin
look.Items.Add(trim(fmdata.dadm.FieldByName('admname').asstring));
fmdata.dadm.next;
end;

end;

procedure TFlogno.Edit1Exit(Sender: TObject);
var serch:bool;
begin
serch:=fmdata.dadm.Locate('admindex',vararrayof([edit1.text]),
[]);
if serch then
look.text:=fmdata.dadm.fieldbyname('admname').asstring
else
look.text:='';

end;

procedure TFlogno.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
{
if (key=#8) then
else
if (key<>#13) then
begin
if (key<#48) or (key>#57) then
key:=#0;
if (length(edit1.Text)=4) then
key:=#0;
end;}
if not (key in['0'..'9',#13,#8]) then
key:=#0;


end;
procedure TFlogno.FormKeyPress(Sender: TObject; var Key: Char);
begin

if key=#13 then
Perform(WM_NEXTDLGCTL, 0, 0);

end;

procedure TFlogno.SpeedButton1Click(Sender: TObject);
var str1,str2,str3,str4:string;
begin
str1:=editm.text;
str2:=trim(fmdata.dadm.fieldbyname('admma').asstring);
str3:=edit1.text;
str4:=trim(fmdata.dadm.fieldbyname('admindex').asstring);
if fmdata.dadm.FieldByName('online').asboolean then
begin
showmessage('该用户已经登陆到服务器上了,请你不要再用该用户名登陆!!!');
end
else
begin
if (str1=str2) and (str3=str4) then
begin
logno_ok:=true;

fmdata.dadm.Edit;
fmdata.dadm.FieldByName('LONDTS').AsDateTime:=date+time;
//fmdata.dadm.fieldbyname('lonts').asdatetime:=time;
fmdata.dadm.FieldByName('online').AsBoolean:=logno_ok;
fmdata.dadm.FieldByName('londte').clear;
//fmdata.dadm.fieldbyname('lonte').clear;
fmdata.dadm.ApplyUpdates(-1);
main.admname:=fmdata.dadm.fieldbyname('admname').asstring;
main.admindex:=str4;
main.admme:=fmdata.dadm.fieldbyname('admme').asinteger;
close;
end
else
begin
lon:=lon+1;
editm.Clear;
edit1.SetFocus;
end;
if lon>2 then
begin
logno_ok:=false;
close;

end;
end;
end;

procedure TFlogno.SpeedButton2Click(Sender: TObject);
begin
logno_ok:=false;
close;

end;

procedure TFlogno.editmKeyPress(Sender: TObject; var Key: Char);
begin
if key=#13 then
BitBtn1.Click();

end;

procedure TFlogno.lookChange(Sender: TObject);
begin
fmdata.dadm.First;
fmdata.dadm.MoveBy(look.ItemIndex);
//showmessage(inttostr());

edit1.Text:=fmdata.dadm.fieldbyname('admindex').asstring;
end;

end.


//这一部分是你登陆部分
program Mclient;

uses
Forms,
uimage in 'uimage.pas' {fimage},
addimage in 'addimage.pas' {faddimage},
main in 'main.pas' {Fmain},
logno in 'logno.pas' {Flogno},
look in 'look.pas' {flook},
admdel in 'admdel.pas' {fadmdel},
admedit in 'admedit.pas' {fadmedit},
admini in 'admini.pas' {fadmin},
mdata in 'mdata.pas' {fmdata: TDataModule},
GIFImage in '../Bg&kl cs/gifimage.pas',
pr in 'pr.pas' {fprint},
sm in 'sm.pas' {fsm},
aub in 'aub.pas' {about};

{$R *.RES}

begin
Application.Initialize;
try
begin
Application.CreateForm(Tfmdata, fmdata);
flogno:= Tflogno.Create(Application);
flogno.ShowModal;
if logno.logno_ok then
begin
Application.CreateForm(TFmain, Fmain);//在这里建立主窗体
Application.CreateForm(Tfimage, fimage);
Application.Run;
end
else
begin
application.run;
application.Terminate;
end;
end;
except
begin
application.MessageBox('重新运行设置程序,修改网络信息','有限公司',0);
application.Terminate;
end;
end;

end.
 
消化中……
:)
 
试试这样.
sendmessage(edit1.Handle,wm_settext,0,longint(pchar('你要发送的东西!')));
 
to:yangyugw
我创建窗体的方法和你一样,不过是MainForm在DataModule的OnCreate事件中创建的
>>对于自定义的过程可以写成fms的私有
要定义一个这样的过程,要再什么地方申明吗?
能不能举个带两个参数的私有过程的例子?
谢谢了
 
jbas:如果仅仅是edit1.text,这样是可以的,但是我的应用范围不仅仅是这些
其实问题的关键还是在定义一个可以直接使用“edit1.text:='hello'”的私有过程
可是现在我还不知道怎么定义
 
这一部分是登陆窗体logno
unit logno;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
DBCtrls, StdCtrls, Buttons, Mask,db, ExtCtrls, ToolWin, ComCtrls, XPMenu;

type
TFlogno = class(TForm)
Image1: TImage;
StaticText1: TStaticText;
Bevel1: TBevel;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Edit1: TEdit;
editm: TMaskEdit;
look: TComboBox;
Panel1: TPanel;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
XPMenu1: TXPMenu;
procedure FormCreate(Sender: TObject);
procedure Edit1Exit(Sender: TObject);
procedure Edit1KeyPress(Sender: TObject; var Key: Char);
procedure FormKeyPress(Sender: TObject; var Key: Char);
procedure SpeedButton1Click(Sender: TObject);
procedure SpeedButton2Click(Sender: TObject);
procedure editmKeyPress(Sender: TObject; var Key: Char);
procedure lookChange(Sender: TObject);
//我一般就写在这里声明 PROCEDURE MS_OK();//这个时定义这个窗体的一个过程
//同上面procedure lookChange(Sender: TObject);一样
Private
//这里定义的是私有的
{ Private declarations }
public
//这里定义的是公共
{ Public declarations }
end;
//这个过程:
PROCEDURE TFlogno.MS_OK();
BEGIN
//你的过程
END;
 
谢谢大家,按照yangyugw大虾讲的,问题已经解决了
 

Similar threads

D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部