如何在form2里使用form1的变量呢?(50分)

  • 主题发起人 主题发起人 linger_1
  • 开始时间 开始时间
L

linger_1

Unregistered / Unconfirmed
GUEST, unregistred user!
代码是这样的,我想在form2里调用form1的变量pnodedata(node.Parent.data)^.id ,node.parent.Text
该如何写呢?
procedure TMDIflfg.Button1Click(Sender: TObject);
var
node: ttreenode;
nodedata : Pnodedata;
begin
if(tree.selected<>nil) then
node :=tree.selected
else
exit;
if node.Level =2 then
begin
addflfg.show;
addflfg.edit1.setfocus;
addflfg.groupbox1.Caption := '添加'+ node.parent.Text + '下子节点';
end;
 
在:
var
Form1: TForm1;
implementation
uses Unit1;
//加入这句
{$R *.dfm}
试试吧
 
如果你想简单一点就照楼上的做,就可以直接使用
如果你想安全一点就在FORM2里做一个PUBLIC的函数,
再加入这句
uses Unit2;
//
如:
type = ....(TForm)
...
public
procedure GetYourData(params:type);
...
end;
...
这样就比较符合面向对象,符合封装的。
 
首先
uses unit1
在form2中可以用form1.Image1.picture.loadfrom('')这种形式调用
 
你需要在FORM1中将pnodedata公布出来,也就是说不能定义为PRIVATE;
然后在FORM2里调用的时候用FORM1.your_variant就行了。
 
Uses Unit2;
在with Form1 do
begin
在这里写就可以了。
end;

最好像hpretty, 那样写的,用函数或过程传递过来。
 
上面的代码是我在调用form2之前用的,我是写过uses了
但是总说那些变量没有定义,比如我调用pnodedata(node.Parent.data)^.id
我就直接写form1.pnodedata(node.Parent.data)^.id 就可以了么?
 
调用form1的对象或者变量都要加上form1.
例如:
if(form1.tree.selected<>nil) then
node :=form1.tree.selected
 
那我在定义的时候这么写也就不对了么?
var
nodedata : Pnodedata;
sql : string;
node : treenode;
 
var
Form1:TForm1;

nodedata : Pnodedata;//加在此处
sql : string;
node : treenode
 
我在form2里这样写:
sql := 'insert into flfg (lb1_xh, lb1, lb2_xh, lb2, xh, rdyj, wfxw, cfyj, cfzljfd) values ('''+
mdiflfg.pnodedate(mdiflfg.node.Parent.data)^.id +''',''' + mdiflfg.node.parent.Text + ''','''+
edit1.text +''',''' + memo1.lines.text + ''','''+ '' +''',''' +
'' + ''', '''+ '' + ''', '''+ '' +''','''+
'' +''')';
为什么总说我没有定义这些变量呢?
不是可以直接调用么?
 
用函数返回值是最安全的,最强壮的!!最 OOP 的
 
可是我连简单的都不会,还自己写函数呢?更不会了
 
你可以把node变量声明在Form1所在单元implementation前面的var中,
或者作为Form1的一个公用属性。
如果声明在Form1单元implementation后面的var中,Form2就算uses Unit1也是引用不了的。
 
那我在form2里还用再定义这些变量吗?
 
请将FORM1中的pnodedata定义为public,然后在FORM2里调用的时候用FORM1.pnodedate就行了。
.
 
我沒有看上面的發言﹐不過我想﹐可以這樣理解(配套的delphi書就是這樣說的)
implementation 關鍵字﹐上面聲明的變量﹐為全局變量﹐下面聲明的變量﹐為本單元變量﹐
但注意﹐如果你想用另一個單元的全局變量﹐你必須用uses這個單元﹐你可能會問﹐
這不造成單元循環引用了嗎, 答案是不一定﹐同樣﹐在implementation上的uses﹐會造成循環引用﹐
而其下的uses是不會的﹐我們加單元就是要加在這里。明白了嗎?
另外﹐順便提一下﹐delphi的object pascal, 不完全符合OOP思想﹐如同一單元不同function中定義的變量﹐
在本單元中也可以訪問。
 
to linger_1:在Form2中不用定义了。你可以试试,可以加深理解。
 
说错了,pnodedata只是一个指针类型标识,那我该如何用这两个数据值呢?
pnodedata(node.Parent.data)^.id ,node.parent.Text
 
node只是我在某一个过程里定义的变量,也在public里面声明么?
可以引用到当前值么?
还有在别的过程里也定义了这个变量,就不会受到影响么?
 
后退
顶部