关于treeview!!!!! 是这样的:我程序中有treeview,它是由主菜单的菜单项构成的,现在我想实现这个功能:改变treeview中的内容让这些改变信息反馈到主菜单,也就是主菜单跟着treeview改动!这个功能有办法实现吗?请个位大哥帮帮忙看看! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 treeview樹根據菜單的內容而變化,你的數據是不是從數據庫中來的?如果是,可以進行關聯update... 在node的data中保留对应菜单的指针,当修改node值时,同时更新TMenuItem(node.data)的相关信息 是的。可以根据treeview的node去更新MenuItem的data菜单内容 --比如 我对node进行了拖动,拖动到另一个父几点下,那更新menu应该怎么写呢? Quote=引用 6 楼 cuit_xiong 的回复:]引用 3 楼 bdmh 的回复:在node的data中保留对应菜单的指针,当修改node值时,同时更新TMenuItem(node.data)的相关信息--比如 我对node进行了拖动,拖动到另一个父几点下,那更新menu应该怎么写呢?[/Quote]TMenuItem(node.data)[ TMenuItem(node.data).parent := TMenuItem(node.parent.data); 当然能够实现:)实际的需求是:1.各树节点与菜单项一一对应,就需要记录它们的ID(唯一标识)和他们的ParentID(父节点),树的不用多说,菜单项的就是上一级菜单的ID,两者相一致。2.无论哪一项发生变更,要得到它的父节点ParentID,以此来确定其关联项的位置。(在树上操作,树的元素已经发生了改变)接下来就谈实现了:如上边几位所说的,Record样式把两个属性值附加到树节点和每个菜单项(MenuItem没测过有没有AddObject之类的方法),当然可以,访问起来毕竟烦琐,还要考虑它的资源释放,说实话,我比较讨厌这个方法:)。既然不愿意麻烦,就捡偷懒的方法来罢。我喜欢组件的Hint属性,把showHint设为False,将ID,ParentID以上述格式存到每一项的Hint中,处理完树后,就去根据ID,ParentID找对应菜单项,然后在新位置上生成一个新的,把老的删除掉就达到你的基本要求了。 procedure TfrmMain.TreeView1DragDrop(Sender, Source: TObject; X, Y: Integer);var TargetNode, SourceNode: TTreeNode;begin TargetNode := TreeView1.DropTarget; SourceNode := TreeView1.Selected; if MessageBox(handle, '您确认要移动目录吗?', '提示', MB_ICONQUESTION + MB_YESNO) = IDYES then if TreeUtil.ModifyNodePID(PNodeData(TargetNode.Data)^.Index, SourceNode) then TreeUtil.FillTree;end; ADO事务回滚的相关问题。。超级头疼 当打开多个form时,如何设置才能把所需窗体弹到最前面 急急如律令 各位大侠:如何在RichEdit中实现文本行距设置? WIN ME下改怎样设置固定IP上网? 请大家帮忙,各种消息都是什么意思?如WM_GETTEXT,WM_GETICON,wm_close...... dll文件返回类型Pchar,高分求教! 实际课题碰到的问题。有兴趣的请进来计论好吗? 紧急求救 关于色值转换问题 Socket编程,聊天软件的问题求助 网页源码中汉字unicode以/u开头的编码如何转换汉字。。 送分 向大家请教一个热键呼出的问题
--比如 我对node进行了拖动,拖动到另一个父几点下,那更新menu应该怎么写呢?
引用 3 楼 bdmh 的回复:
在node的data中保留对应菜单的指针,当修改node值时,同时更新TMenuItem(node.data)的相关信息
--比如 我对node进行了拖动,拖动到另一个父几点下,那更新menu应该怎么写呢?
[/Quote]TMenuItem(node.data)[
实际的需求是:1.各树节点与菜单项一一对应,就需要记录它们的ID(唯一标识)和他们的ParentID(父节点),树的不用多说,菜单项的就是上一级菜单的ID,两者相一致。2.无论哪一项发生变更,要得到它的父节点ParentID,以此来确定其关联项的位置。(在树上操作,树的元素已经发生了改变)
接下来就谈实现了:如上边几位所说的,Record样式把两个属性值附加到树节点和每个菜单项(MenuItem没测过有没有AddObject之类的方法),当然可以,访问起来毕竟烦琐,还要考虑它的资源释放,说实话,我比较讨厌这个方法:)。既然不愿意麻烦,就捡偷懒的方法来罢。我喜欢组件的Hint属性,把showHint设为False,将ID,ParentID以上述格式存到每一项的Hint中,处理完树后,就去根据ID,ParentID找对应菜单项,然后在新位置上生成一个新的,把老的删除掉就达到你的基本要求了。
Y: Integer);
var TargetNode, SourceNode: TTreeNode;
begin
TargetNode := TreeView1.DropTarget;
SourceNode := TreeView1.Selected;
if MessageBox(handle, '您确认要移动目录吗?', '提示', MB_ICONQUESTION
+ MB_YESNO) = IDYES then
if TreeUtil.ModifyNodePID(PNodeData(TargetNode.Data)^.Index, SourceNode) then
TreeUtil.FillTree;
end;