这个问题我问了多次了,也看了DELPHI的帮助,还是有问题。可能我太笨了,再来向大家请教一下。显示FORM3
procedure treecreate1(tabnam1:string);
begin
  form1.ADOQuery3.Close;
  form1.ADOQuery3.SQL.Clear;
  form1.ADOQuery3.SQL.Add('select * from '+tabnam1);
  form1.ADOQuery3.Open;
  form3.TreeView1.Items.Clear ;
  form3.TreeView1.Enabled:=true;
  while not form1.ADOQuery3.eof do
  begin
    form3.TreeView1.Items.Add(form3.TreeView1.TopItem,form1.ADOQuery3.Fields[0].AsString+form1.ADOQuery3.Fields[1].AsString);
    form1.ADOQuery3.Next ;
  end;
 form3.ShowModal;
end;调用该函数
procedure TForm1.DBGrid1DblClick(Sender: TObject);
begin
 if form3.ShowModal=mrok then
 begin
  form3.ModalResult:=mrcancel;
  form3.Close
 end
 else
 begin
  if dbgrid1.SelectedField=dbgrid1.DataSource.DataSet.FieldByName('单位代码') then
   treecreate1('单位代码');双击FORM3中的树形菜单,传值回DBGRID
procedure TForm3.TreeView1DblClick(Sender: TObject);
begin
  if treeview1.Selected=nil then
  exit;
  form1.Edit1.Text:=treeview1.Selected.Text;
  form1.Edit1.Text:=treeview1.Selected.Text;
  form3.ModalResult:=mrcancel;
  form3.Close;
end;
为什麽每次我双击FORM中DBGRID中的不同字段时,打开的FORM3中显示的都是同样的内容呢。
各位高人可否耐心的看一下,我真的 被这个问题快烦死了。

解决方案 »

  1.   

    你搞错了吧!为何你要两次form3.ShowModal呢?首先你的程序设就很有问题。
      

  2.   

    我想在双击FORM1中DBGRID中的不同字段时,在FIRM3中生成不同的树形菜单。
      

  3.   

    你使用单步调试一下,可能没有执行到treecreate1这个过程,所以导致了这个问题。
    另外,你ShowModal两次这个窗口,你的程序需要改进。
      

  4.   

    是啊,第一次执行了,第二次就没有执行,请教该在哪里改进,我现在是没办法了,还有,我要N次SHOWMODAL这个窗口。
      

  5.   

    1. if dbgrid1.SelectedField=dbgrid1.DataSource.DataSet.FieldByName('单位代码')    
          then        
            treecreate1('单位代码'); --------?
    2. form1.ADOQuery3.SQL.Add('select * from '+tabnam1);
    3. form3.TreeView1.Items.Add(form3.TreeView1.TopItem,form1.ADOQuery3.Fields
           [0].AsString+form1.ADOQuery3.Fields[1].AsString);你的“treecreate1('单位代码');”传进去的“单位代码”是什么?
    是一个表的名字?定值??如果是定值那你没次选的都是同一张表啊
      

  6.   

    上面不是完整的程序,再加上部分代码:
    ..................
    if dbgrid1.SelectedField=dbgrid1.DataSource.DataSet.FieldByName('单位代码') then
       treecreate1('单位代码');
      if dbgrid1.SelectedField=dbgrid1.DataSource.DataSet.FieldByName('单位所在地') then
       treecreate3('中国行政区划分','中国行政区划分代码1','中国行政区划分代码2');
      if dbgrid1.SelectedField=dbgrid1.DataSource.DataSet.FieldByName('隶属关系') then
       treecreate1('单位隶属关系');
    ...............
    treecreate1,treecreate3都是生成树形菜单的函数。
      

  7.   

    procedure treecreate1(tabnam1:string);
    begin
      form1.ADOQuery3.Close;
      form1.ADOQuery3.SQL.Clear;
      form1.ADOQuery3.SQL.Add('select * from '+tabnam1);
      form1.ADOQuery3.Open;
      form3.TreeView1.Items.Clear ;
      form3.TreeView1.Enabled:=true;
      while not form1.ADOQuery3.eof do
      begin
        form3.TreeView1.Items.Add(form3.TreeView1.TopItem,form1.ADOQuery3.Fields[0].AsString+form1.ADOQuery3.Fields[1].AsString);
        form1.ADOQuery3.Next ;
      end;
     form3.ShowModal;
    end;
    你的内容取的是同一张表的同样的字段,所以显示的内容一定是相同的,我不知道你要完成的功能是不是要据选取的字段来填充TreeView,如果是的话,建议你把Fields[0]和Fields[1]换成选中的字段名,即加一个参数。
      

  8.   

    根据我在DBGRID上点击的字段的不同,要打开的表是不同的,我的代码有点长,所以只附上了部分代码,让大家误会了。
    我要问的主要是SHOWMODAL的问题。请大家指教。
      

  9.   

    F5,添加断点
    F7,追踪执行
    F8,单步执行
      

  10.   

    在第一次执行之后,无论我点击哪个字段,在执行到if form3.ShowModal=mrok then这一句时,都会弹出FORM3窗体,显示的树形菜单为我上次运行显示的内容。关闭该窗体后,程序才继续往下执行。是什麽原因。
      

  11.   

    这个判断不要吧
    你form3 showmodal状态下,是操作不了form1的,
    TForm1.DBGrid1DblClick的时候form3肯定不是showmodal的 if form3.ShowModal=mrok then
     begin
      form3.ModalResult:=mrcancel;
      form3.Close
     end