本人没有分了,但是问题还是有的:参数传递的问题??? ( 积分: 0 )

  • 主题发起人 主题发起人 handsome1234
  • 开始时间 开始时间
H

handsome1234

Unregistered / Unconfirmed
GUEST, unregistred user!
SelectPrintItem_Frm.ShowFormSelectPrintItem(Temp_Table1,'rk',StrType,StrTypeDB);//调用时,StrType我用debug看了StrType的Text有值

function ShowFormSelectPrintItem(Dataset:TDataset;Kindtring;StrType:TStringList;StrTypeDB:TStringList): Boolean ;
begin
StrType:= TStringList.Create;
StrTypeDB:=TStringList.Create;
SelectPrintItem_Frm.Kind:=Kind;
SelectPrintItem_Frm.StrType:=StrType;//这里的StrType居然没有值????很难理解阿?
SelectPrintItem_Frm.StrTypeDB:=StrTypeDB;
FormSelectPrintItem:=TFormSelectPrintItem.Create(Application);
FormSelectPrintItem.ShowModal;
FormSelectPrintItem.Release;
end;
 
SelectPrintItem_Frm.ShowFormSelectPrintItem(Temp_Table1,'rk',StrType,StrTypeDB);//调用时,StrType我用debug看了StrType的Text有值

function ShowFormSelectPrintItem(Dataset:TDataset;Kindtring;StrType:TStringList;StrTypeDB:TStringList): Boolean ;
begin
StrType:= TStringList.Create;
StrTypeDB:=TStringList.Create;
SelectPrintItem_Frm.Kind:=Kind;
SelectPrintItem_Frm.StrType:=StrType;//这里的StrType居然没有值????很难理解阿?
SelectPrintItem_Frm.StrTypeDB:=StrTypeDB;
FormSelectPrintItem:=TFormSelectPrintItem.Create(Application);
FormSelectPrintItem.ShowModal;
FormSelectPrintItem.Release;
end;
 
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
procedure open(strtype, strdb: TStringList);
{ Private declarations }
public
{ Public declarations }

end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var strtype: TStringList;
strdb: TStringList;
begin
strtype := TStringList.Create;
strdb := TStringList.Create;
strtype.Add('1');
strtype.Add('11');
strdb.Add('2');
strdb.Add('22');
open(strtype,strdb);
strtype.Free;
strdb.Free;
end;

procedure TForm1.open(strtype: TStringList;strdb: TStringList);
begin
ShowMessage(strtype.Text);
ShowMessage(strdb.Text);
end;

end.
都有值呀!
 

StrType:= TStringList.Create;
StrTypeDB:=TStringList.Create;
注释掉就可以拉,为什么呢?
是不是
形参StrType:TStringList没有被创建就可以使用?,好长时间没编程了,好多东西都忘了。
 
从上面的兄弟的代码来看:形参StrType:TStringList没有被创建就可以使用。是不是?
那全局变量呢?
我把
StrType:= TStringList.Create;
StrTypeDB:=TStringList.Create
注释掉后,我的SelectPrintItem_Frm.StrType:=StrType//这句就运行正常有值了,也没有出现异常,我觉得应该出现异常因为SelectPrintItem_Frm.StrType我并没有创建它。居然还可以赋值。
 
StrType:= TStringList.Create;
就是说这是你新建的,相当于
先var StrType: TStringList;没有意义的。
而在声明这个函数的时候,就已经定义了这个参数。
如:function ShowFormSelectPrintItem(Dataset:TDataset;Kindtring;StrType:TStringList;StrTypeDB:TStringList): Boolean ;
这实际上是已经定义了。。。。
用就行了。
 
应该是对象生命周期的问题吧。你创建一下StrType,然后用SelectPrintItem_Frm.StrType.Text := StrType.Text;而且,最好不要让参数的名字和SelectPrintItem_Frm的StrType重名,这样容易出错的。
handsome1234说: (2005-08-14 15:59:21)
大师请看electPrintItem_Frm.StrType1:=StrType;我在全局变量StrType1前加了个“1”,后运行还是能通过,我觉得应该出现异常的,可居然还是没出现,并且StrType1的debug里面什么也看不到。
月球球长说: (2005-08-14 16:00:36)
那你用SelectPrintItem_Frm.StrType1 := TStringList.Create了吗?
handsome1234说: (2005-08-14 16:02:10)
我也觉得应该这样,但是为什么我没有这样的情况下,为啥还能SelectPrintItem_Frm.StrType1被赋值?
月球球长说: (2005-08-14 16:04:06)
你是用对象给对象赋值应该不会出错,如果你不Create直接写SelectPrintItem_Frm.StrType1.Text := StrType.Text那估计就要出错了。你的那种写法应该是告诉Delphi把StrType1的地址指在StrType的地址上,而不是使用对象。
handsome1234说: (2005-08-14 16:04:53)
哦,大侠就是利害。谢谢
月球球长说: (2005-08-14 16:05:18)
那里,偶汗颜。
handsome1234说: (2005-08-14 16:05:31)
你也是在北京?那个区?
月球球长说: (2005-08-14 16:05:59)
俺在丰台。
handsome1234说: (2005-08-14 16:07:29)
分析得有道理阿
 
还有个问题:
//SelectPrintItem_Frm.StrType1:=TStringList.Create;
SelectPrintItem_Frm.StrTypeDB2:=TStringList.Create;
SelectPrintItem_Frm.StrType1:=StrType;
test:=SelectPrintItem_Frm.StrType1.text;//没创建SelectPrintItem_Frm.StrType1,用SelectPrintItem_Frm.StrType1.text居然能够运行,不出现异常,不太明白???
 
还有个问题:
Kind:String;//在全局变量区
调用时
SelectPrintItem_Frm.Kind:=Kind;应该可以直接这样吧?但是SelectPrintItem_Frm.Kind我也没有create阿,怎么可以用?难道他属于基本类型?
 
我那几个不是类的成员变量,是全局变量。
var
FormSelectPrintItem: TFormSelectPrintItem;
Kind:String;
StrType1,StrTypeDB2:TStringList;//应该算是全局变量吧?
implementation

{$R *.dfm}
StrTypeDB2是变量没有被创建就可以使用?
SelectPrintItem_Frm.StrType1:=StrType;
test:=SelectPrintItem_Frm.StrType1.text;//?????????
怎么说TStringList类型的变量不用创建就可以使用?不是很明白!?
 
后退
顶部