起步软件技术论坛-X3

 找回密码
 立即注册
搜索
12
返回列表 发新帖
楼主: s1113

【结帖】[请求]TCustomTreeView子类树节点重命名取值**

[复制链接]
发表于 2008-6-30 14:05:17 | 显示全部楼层
平台的datatreeview是我们自己写的控件。
平台对第三方控件的调用时,要求接口中不能包含指针。控件内部的指针操作是没有问题的。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-6-30 21:44:27 | 显示全部楼层
能不能把datatreeview的方法
procedure Edit(const Item: TTVItem); override;
实现代码贴出来?

另:如果一定要在这里回帖反馈问题交流的话,只能每天晚上我就前一问题回复一次了,因为目前白天在公司发帖实在不方便。
回复 支持 反对

使用道具 举报

发表于 2008-7-1 09:18:12 | 显示全部楼层
“如果什么都不做同时确认,就会把之前的节点显示名都给清空了,级联清空到DisplayField字段”
是否楼主写的代码有问题?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-7-1 20:07:40 | 显示全部楼层
就是我的代码有问题,所以才要你们关于procedure Edit(const Item: TTVItem); override;实现的方法呀?

后面的你们不用看,你只看“如果什么都不做同时确认,就会把之前的节点显示名都给清空了”,清空不清空DisplayField字段是我自己控制的。

我问题是取Item.pszText赋给Selected.Text,当节点名称有修改时没问题,但当节点名称没有任何修改时,从重命名编辑状态确认回到浏览状态时,Item.pszText取到的为“空字符串”,才会有下面


########################
Business.Forms.TCustomTreeView
该类的方法
procedure Edit(Item: Business.System.tagTVITEMA); virtual;
在子类的方法覆盖中如何得到所编辑的节点最终值?

参数的介绍没有呀?
########################

这个问题,不知道是不是我还没把问题解释明白?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-7-1 20:21:26 | 显示全部楼层
最初由 s1113 发布
[B]能不能把datatreeview的方法
procedure Edit(const Item: TTVItem); override;
实现代码贴出来?

另:如果一定要在这里回帖反馈问题交流的话,只能每天晚上我就前一问..

以下省略...... [/B]


这样的沟通效率真正让我体会一回“隔靴搔痒”
真希望你们的技术支持能够灵活一些,不然一边是公司的规定,一边是你们的墨守成规,可苦了兄弟我呀!~~
回复 支持 反对

使用道具 举报

发表于 2008-7-2 08:59:44 | 显示全部楼层
Generates an OnEdited event.

procedure Edit(const Item: TTVItem); dynamic;

Description

Edit is called automatically when the user edits the text of a tree view node. The Item parameter is the record supplied by the Windows control that identifies the node that was edited and the new value of its text. Edit unpacks this information into the parameters of an OnEdited event handler, and allows the event handler to change the value of the node抯 text.
楼主,关于edit方法的说明,在delphi帮助和源码里都有说明的。
回复 支持 反对

使用道具 举报

发表于 2008-7-2 09:00:00 | 显示全部楼层
把你的代码贴出来看看吧。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-7-2 09:32:19 | 显示全部楼层
TBtTreeView = class(TPublishedTreeView)
  ……
  protected
    { Protected declarations }
    procedure Edit(const Item: TTVItem); override;
  ……
end;

procedure TBtTreeView.Edit(const Item: TTVItem);
var
  bEdit: Boolean;
begin
  inherited Edit(Item);
  bEdit := False;
  if (DataSet.State in [TDataSetState.dsBrowse]) then
  begin
    bEdit := True;
    DataSet.Edit;
  end;
  DataSet.FieldByName(DisplayField).AsString :=
    StrUtils.IfThen(Item.pszText='', DataSet.FieldByName(DisplayField).AsString,
           Item.pszText);
  if bEdit then
    DataSet.Post;
end;
回复 支持 反对

使用道具 举报

发表于 2008-7-2 11:01:57 | 显示全部楼层
楼主,经测试发现:
在平台里,覆盖了Edit方法后,会导致Node.text被清空,应该是个bug。
建议:
利用Treeview的OnEdited和OnCancelEdit事件来实现你的需求
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-7-2 21:46:28 | 显示全部楼层
OnCancelEdit好像跟确认的情况没什么关系。

OnEdited也不行,算了,结贴吧。

知道了Bug也算是收获,感谢版主jiahaiming一直以来的热心和耐心!
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-18 15:56 , Processed in 0.034847 second(s), 13 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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