当我把TreeView1的根结点拖拽到TreeView2的结点中时就会报异常,是怎样处理呢?

解决方案 »

  1.   

    估计是你写程序的问题,把代码贴出来,是在DRAG事件出的问题
      

  2.   

    鼠标释放时执行的语句}procedure TMyTreeView.DragDrop( Sender, Source: TObject;X, Y : Integer );var    TempNode1,T : TTreeNode;    AttachMode1 : TNodeAttachMode;begin    AttachMode1 := naAddChild;    (Sender as TTreeView).Items.BeginUpdate;
        (Source as TTreeView).Items.BeginUpdate;
    try    TempNode1 := (Source as TTreeView).Items.AddChild( (Sender as TTreeView).DropTarget,'Temp' );try
        if Sender <> nil then
        begin
           T:=(Sender as TTreeview).GetNodeAt(X,Y);
           if T<>nil then
              begin
                    TempNode1 := (Source as TTreeview).Items.AddChild((Sender as TTreeview).DropTarget,'Temp' );
                    (Source as TTreeview).Selected.MoveTo(T, AttachMode1);
              end
           else
              begin
                    (Sender as TTreeview).Items.Add(nil,(Source as TTreeview).Selected.Text);          end;
        end;finally    TempNode1.Free; end;finally    (Sender as TTreeView).Items.EndUpdate;
        (Source as TTreeView).Items.EndUpdate;
    end;end;这是(Source as TTreeview).Selected.MoveTo(T, AttachMode1);这里报异常的
      

  3.   

    if (Source as TTreeview).Selected<>nil then
    (Source as TTreeview).Selected.MoveTo(T, AttachMode1);
      

  4.   

    你的问题好象问的有点奇怪,你仔细想一想:
    if (Source as TTreeview).Selected<>nil then
    (Source as TTreeview).Selected.MoveTo(T, AttachMode1);是可以的,
    如果你移动的是根节点就是说Null.MoveTo(T,AttachModel)你认为这也是可行的吗?
    请你思考用另外的方法实现,即:
    if (Source as TTreeview).Selected <> nil then
      (Source as TTreeview).Selected.MoveTo(T, AttachModel)
    else
      其他的方法;
      

  5.   

    既然是空树,怎么触发了(Source as TTreeview).Selected.MoveTo(T, AttachMode1);
    难道不应该触发的是(Sender as TTreeview).Items.Add(nil,(Source as TTreeview).Selected.Text);
      

  6.   

    我估计是GetNodeAt(X,Y)方法的问题。当你将TreeView1的结点托放到TreeView2的某一结点上方并释放时,GetNodeAt(X, Y)方法并没有得到一个有效的结点,而很可能是个空值(nil)。GetNodeAt(X, Y)方法需要较好的鼠标定位才行,否则不能返回你想要的结果。
      

  7.   

    GetNodeAt(X,Y)方法没问题,因为我只是将根节点下的子节点用个递归循环将其移入的方法没有实现了。