起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 360|回复: 18

【结贴】用MoveUpNode排序组织机构后的指针错误**

[复制链接]
发表于 2007-12-3 13:00:41 | 显示全部楼层 |阅读模式
代码
if OrgViewStyle = TOrgViewStyle.ovsTreeView then
    otvOrgTreeView.MoveUpNode(otvOrgTreeView.Selected, iMoveStep)
  else
    ocOrgChart.MoveUpNode(ocOrgChart.Selected, iMoveStep);
排序组织机构树的一个节点后,点该节点的子节点经常会抱指针错

例如,移动一个机构(机构下面包含部门和机构),上移2次,第一次和部门交换位置,第二次和机构交换位置,展开移动的机构,选择部门,就会抱错
或者下移2次,第一次和机构交换位置,第二次和部门交换位置,展开移动的机构,选择机构,就会抱错
回复

使用道具 举报

发表于 2007-12-3 19:53:18 | 显示全部楼层
楼主TorgtreeView和TorgChart都会出现指针错误么?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-12-4 13:31:07 | 显示全部楼层
我只试了TorgtreeView
有时候第一次试验不抱错,在移动一次就会报错
一般在CurrentBizNode.BizURL.URL

TBizNode(Node.Data).BizURL.FileName
处抱错
回复 支持 反对

使用道具 举报

发表于 2007-12-4 14:27:16 | 显示全部楼层
楼主楼上的代码是你自己写的么?
把加载树型视图的代码贴上来看一下,
我在这里在同一个TorgTreeView上面加载一个组织机构树,然后按照一楼的代码:otvOrgTreeView.MoveUpNode(otvOrgTreeView.Selected, iMoveStep)移动2次以后展开移动的节点不会出现指针错误。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-12-4 15:07:15 | 显示全部楼层
不是我自己写的,我在组织机构设计器里加2个函数
procedure TMAINFORM.actUpNodeExecute(Sender: TObject);

begin
  if OrgViewStyle = TOrgViewStyle.ovsTreeView then
    otvOrgTreeView.MoveUpNode(otvOrgTreeView.Selected, iMoveStep)
  else
    ocOrgChart.MoveUpNode(ocOrgChart.Selected, iMoveStep);


end;

procedure TMAINFORM.actDownNodeExecute(Sender: TObject);

begin
  if OrgViewStyle = TOrgViewStyle.ovsTreeView then
    otvOrgTreeView.MoveDownNode(otvOrgTreeView.Selected, iMoveStep)
  else
    ocOrgChart.MoveDownNode(ocOrgChart.Selected, iMoveStep);

end;



报错的函数(我没有改动过)
procedure TMAINFORM.otvOrgTreeViewChange(Sender: TObject; Node: TTreeNode);
begin

    if Assigned(Node) then
    begin
      OrgComboBox.FileName := TBizNode(Node.Data).BizURL.FileName;
    end;

end;

procedure TMAINFORM.actUpUpdate(Sender: TObject);
begin

  TAction(Sender).Enabled := Assigned(CurrentBizNode) and Assigned(CurrentBizNode.Parent) and not (CurrentBizNode.NodeKind in [TBizObjectKind.boOrgRoot, TBizObjectKind.boPositionRoot, TBizObjectKind.boPersonRoot]);

end;
回复 支持 反对

使用道具 举报

发表于 2007-12-4 15:43:40 | 显示全部楼层
我在组织机构设计器里面放置了2个按钮把你的代码拷贝进去了,测试了几次都是正常的。
并且代码也没有走到你上面报错的那两个函数中!
另外
iMoveStep我设置的是1
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-12-4 16:15:43 | 显示全部楼层
procedure TMAINFORM.otvOrgTreeViewChange(Sender: TObject; Node: TTreeNode);
是每次选择一个node就会触发的
不可能出现  代码也没有走到你上面报错的那两个函数中!
不止要展开移动的节点,要选择里面的节点,才会抱错
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-12-4 16:17:56 | 显示全部楼层
我是直接在系统空间的组织机构设计器中改的
回复 支持 反对

使用道具 举报

发表于 2007-12-4 16:36:07 | 显示全部楼层
我也是,楼主跟踪一下移动的时候走到你错误的代码了么?我这里根本就没有走那两个函数呢
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-12-4 17:18:50 | 显示全部楼层
移动的时候不走,移动后选择才走,只有选择一个node的时候才走
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-1 17:57 , Processed in 0.044796 second(s), 16 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表