是这样的:
一个主窗体 treeview 有很多个节点,我左击某个节点
就弹出一个新的窗体,新的窗体上有个 edit 和 button1当我 单击 新窗体的 button1 按钮,就需要把 edit.text 的值
写到 主窗体 treeview 节点(就是刚才左击的节点)的 data 属性里现在问题:
单击 新窗体的 button1 按钮,怎么对应到 
treeview 节点(就是刚才左击的节点)呢?是不是定义个全局变量
我左击节点时,把某个值写到 这个变量里
那到底要写个什么值呢?
(是 treeview 的个数,好像也不行)谢谢!

解决方案 »

  1.   

    如果你弹出的是模式窗口,那么 treeview.selected 点击的节点如果不是模式窗口,那么就要用个全局变量来放某个值,这个值各个节点应该是唯一的
      

  2.   

    谢谢大哥
    我不知道我弹出的窗口是否是模态
    我这样新建窗口的
    GzzSxForm:=TGzzSxForm.Create(self);
    try
        GzzSxForm.ShowModal;
    finally
        GzzSxForm.Free;
    end;
    这样弹出的是模态窗口吗?
    大哥,节点的什么值是唯一的啊?谢谢!
      

  3.   

    ShowModal 就是模式,在你关闭窗口之前,下面窗口的操作状态应该是不能变化的,所以用treeview.selected 应该可以取得你之前操作的节点在节点的 data 放东东 一般是个结构体,因为节点名称,有时会重复,为了方便以后要找指定节点,结构体里面应该有个变量 来做唯一的标识 (规则你自己定了)
      

  4.   

    谢谢大哥,好像不行啊!unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ComCtrls, StdCtrls;type
      TForm1 = class(TForm)
        TreeView1: TTreeView;
        Button1: TButton;
        Button2: TButton;
        procedure FormCreate(Sender: TObject);
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation
    uses
          Unit2;
    {$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
    var
         ss:string;
         ss1:^string;
    begin
         ss:='12345';
         new(ss1);
         ss1^:=ss;
         TreeView1.Items[1].Data:=ss1;
    end;procedure TForm1.Button1Click(Sender: TObject);
    var
         CurrenNode:TTreeNode;
         ss:^string;
         ssstr:string;
    begin
         if treeview1.selected<>nil then
                      CurrenNode:=treeview1.selected;
         new(ss);
         ss:=CurrenNode.Data;
         ssstr:=ss^;
         showmessage(ssstr);
    end;procedure TForm1.Button2Click(Sender: TObject);
    begin
          Form2:=TForm2.Create(self);
    try
        Form2.ShowModal;
    finally
        Form2.Free;
    end;end;end.unit Unit2;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm2 = class(TForm)
        Edit1: TEdit;
        Button1: TButton;
        Button2: TButton;
        procedure Button2Click(Sender: TObject);
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form2: TForm2;implementationuses
          Unit1;{$R *.dfm}procedure TForm2.Button2Click(Sender: TObject);
    begin
         form2.Close;
    end;procedure TForm2.Button1Click(Sender: TObject);
    begin
          Assert(Form1.TreeView1.Selected <> nil);
          Form1.TreeView1.Selected.Data := PChar(edit1.Text);
    end;end.
    是不是 
    Assert(Form1.TreeView1.Selected <> nil);
    Form1.TreeView1.Selected.Data := PChar(edit1.Text);这里写错了呢?
    谢谢!
      

  5.   

    谢谢大哥
    非常奇怪的是:
    procedure TForm2.Button1Click(Sender: TObject);
    begin
          Assert(Form1.TreeView1.Selected <> nil);
          Form1.TreeView1.Selected.Data := PChar(edit1.Text);
    end;
    这样不行
    单击 Button1 出现路径错误
    procedure TForm2.Button1Click(Sender: TObject);
    var
         ss:string;
         ss1:^string;
    begin
          ss:=edit1.Text;
          new(ss1);
          ss1^:=ss;
          Assert(Form1.TreeView1.Selected <> nil);
          Form1.TreeView1.Selected.Data := ss1;
    end;可以啊~~这是什么原因啊?谢谢!