form1中,有个treeview1,点击树的某节点,弹出另外一个窗体form2,form1中选中的节点的信息传递给form2,form2可以修改这个树的节点的相关内容.如果有修改,关闭form2后,form1树的节点的内容也相应的改掉.不知道怎么传递变量操作?(不要用全局变量.模式form2的窗体是在动态中建立的.)
我用函数来传递,大概思路如下
在form1的按钮中
........
if treeview1.Selected<>nil then
 form2:=tform2.Create(Application);
 treeview1.Selected.Text:=frm_danwei.updatenode(nodeid);
在form2中,
var tempnodeid:string  //用以接受form1传过来的变量,以便在form2中应用
class function tform2.updatenode(var nodeid:string):string;     
begin
 with self.Create(Application) do  
   begin
     try
     nodeid:=nodeid;
     ShowModal;  
     result:=edit2.Text; //edit2中包含需要传回到form1中的那个节点的内容.
      finally
     free;
   end;
 end;
end;现在发现只能修改一次,在换个节点修改第就会出错.报错"read of adderss 00000000 "
刚学delphi,不知这种变量传递的问题该怎么做? 请指教...

解决方案 »

  1.   

    如果能够成功修改一次的话,要考虑form2是不是完全释放了,建立一个已存在的窗体会报类似的错误。
      

  2.   

    修改成功后,重新加载一下form1的treeview
      

  3.   

    with self.Create(Application) do
    楼主的写法很强悍,呵呵,虽然说没错,但一般人都看不懂
      

  4.   

    如果能够成功修改一次的话,重新加载一下form1的treeview
      

  5.   

    实际上就是窗体间的数据交换,在子窗体里的数据修改后再传给主窗体.
    比如主窗体传两个变量到子窗体,子窗体修改后再把这两个变量传回到主窗体.
    怎么做的?应该是经常碰到的问题啊.
    不要用到全局变量(很多地方都不推荐用全局变量阿),也不要重新加载一下form1的treeview,(这样很慢),另外子窗体是动态生成的.最终是要释放掉的.像这种情况,怎么做的阿?
    有会的吗
      

  6.   

    ShowModal的那种写一个Show***的方法(里面调用ShowModal),在方法中加var的参数,返回值还是ModalResult
    Show的那种加事件,主窗体在事件中使用事件参数得到需要的信息
      

  7.   

    http://topic.csdn.net/u/20080304/12/8c8712bb-ea90-4b97-88d0-ba727cff52c9.html
    看看 应该有帮助