delphi treeview 和 combobox问题 怎样能存两个值一个显... 20

 我来答
fit大虾
2011-07-16 · TA获得超过564个赞
知道小有建树答主
回答量:551
采纳率:50%
帮助的人:250万
展开全部
  如果只存储两个值就简单一点,例如treeview如下
  var Node: TTreeNode;
  Node := TreeView.Items.AddChild(‘值1’); //第一个值会在节点显示出来
  Node.Data:=strnew(PChar(‘值2’)); //第二个值不显示,Data其实是个指针,strnew是开辟一段内存放字符串‘值2’的,data指向这段内存的地址
  应用如下(str1和str2分别得到当前选中项的值1和值2)
  str1:=TreeView.Selected.Text;
  str2:=pchar(TreeView.Selected.data);
  ---------------
  combobox的原理其实也一样,如
  combobox1.Items.AddObject('值1',TObject(strnew(PChar(‘值2’))));//第2个参数也是指针来的
  应用如下(str1和str2分别得到当前选中节点的值1和值2)
  Str1:=combobox1.Items.Strings[combobox1.itemindex];
  str2:=string(combobox1.Items.Objects[combobox1.ItemIndex]);
  -----------
  另外,除了能利用指针存放第2个值,还可以存放更多的值,因为指针是不限类型的,需要先定义一个数据结构,
  type //定义帐套
  PMydata=^TpMydata;//加一行,定义其指针类型
  TPMydata=packed Record
  id:integer;
  Name:string;
  ......(略)
  end;
  ...赋值过程,需要分配内存(略)
  i:=PMydata(combobox1.Items.Objects[combobox1.ItemIndex])^.id;//i整型的值
  s:=PMydata(combobox1.Items.Objects[combobox1.ItemIndex])^.name;//s是字符串
  ....
  ----------------------
  最后值得注意的是,为了避免内存泄漏,把刚才分配的内存空间释放
  在treeview的OnDeletion事件增加以下代码
  procedure TForm1.treeviewDeletion(Sender: TObject; Node: TTreeNode);
  begin
  if Node.Data<>nil then StrDispose(Node.Data);//与strnew对应
  end;
  ComboBox由于没有OnDeletion事件,释放内存比较麻烦,要写个循环
  for i:=ComboBox1.Items.Count-1 downto 0 do
  if ComboBox1.Items.Objects[i] <> nil then
  begin
  StrDispose(ComboBox1.Items.Objects[i]); //如果不是strnew创建的内存,要用其他方法释放
  end;
  具体操作的东西很多,自己慢慢摸索,一下子打了这么多字,没有认真测试,可能有错误之处,尽信书则不如无书,洗澡。下线!!
匿名用户
2011-07-16
展开全部
delphi treeview 和 combobox问题 怎样能存两个值一个显...
丹凤呈祥龙献瑞 红桃贺岁杏迎春 bn mnh bn j福满人间

懕狅凛狑摿伢捯琐嚆婽撼拯数彦琵
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
港岛没有喵喵iy
2011-07-16 · 超过33用户采纳过TA的回答
知道答主
回答量:147
采纳率:0%
帮助的人:44.7万
展开全部
这个不会,关注中。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2011-07-16
展开全部
不行的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式