form1包含三个组件:
edit1,button1,treeview11.treeview1中根据数据库中的数据画树(已实现);2.单击button1,treeview1显示在edit1正下方,就像一个combobox下拉列表一样,(已实现);3.双击treeview1,edit1.text显示为选中的树节点名称,然后treeview1隐藏掉。问题:赋值有延迟,总要到下一次显示出treeview时,edit1才能得到上次选中的值,请教该怎么解决呢?

解决方案 »

  1.   

    procedure TForm1.TreeView1DblClick(Sender: TObject);
    begin
      edit1.Text:=treeview1.Selected.Text
    end;
    怎么会有延时??
      

  2.   

    我不知道哦,用showmessage()函数显示时还好好的,就到edit1.text := treeview1.selected.text
    时,才老不出来的
      

  3.   

    procedure TfrmAddDefect.TreeView1DblClick(Sender: TObject);
    begin
      GlobValue:= TreeView1.Selected.Text;
      treeview1.Visible := false;
    end;procedure TfrmAddDefect.Button2Click(Sender: TObject);
    begin
      CreateTree('Table_Severity', '严重级');
      treeview1.Left := edit2.Left;
      treeview1.Top := edit2.top + edit2.Height;
      treeview1.width := 162;
      treeview1.Height := 185;
      treeview1.Visible := true;
      edit2.Text := GlobValue;
    end;以上是两段相关的源代码,其中全局变量GlobValue是在原来用treeview1.selected.text失败后用全局变量来保存节点名称的,结果也是失败,各位,这是一个重要的模块来的,帮帮我吧
      

  4.   

    搞定了,哈哈.......
    原来只要加一个变量判断是哪个button产生的click事件,然后再treeview的dblclick事件里边对相应的edit控件赋值就好了,那里的treeview1.selected.text是产生得最及时地。好谢谢各位了!
      

  5.   

    我是把各事件的产生糅合到一起了,所以才会产生消息延迟的,后来仔细想想事件产生的先后顺序就解决了。新人就是这么不理智啊。呵呵以下是修改后的源代码:procedure TfrmAddDefect.TreeView1DblClick(Sender: TObject);
    begin
      if btnClicked = 'button2' then
        edit2.Text := TreeView1.Selected.Text//这里将产生dblclick事件,所以在这里赋值
      else if btnClicked = 'button3' then
        .....;  treeview1.Visible := false;
    end;procedure TfrmAddDefect.Button2Click(Sender: TObject);
    begin
      btnClicked := 'button2';  CreateTree('Table_Severity', '严重级');
      treeview1.Left := edit2.Left;
      treeview1.Top := edit2.top + edit2.Height;
      treeview1.width := 162;
      treeview1.Height := 185;
      treeview1.Visible := true;           //这里负责显示treeview控件
    end;