delphi treeview 和 combobox问题 怎样能存两个值一个显... 20
4个回答
展开全部
如果只存储两个值就简单一点,例如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;
具体操作的东西很多,自己慢慢摸索,一下子打了这么多字,没有认真测试,可能有错误之处,尽信书则不如无书,洗澡。下线!!
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福满人间
懕狅凛狑摿伢捯琐嚆婽撼拯数彦琵
丹凤呈祥龙献瑞 红桃贺岁杏迎春 bn mnh bn j福满人间
懕狅凛狑摿伢捯琐嚆婽撼拯数彦琵
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个不会,关注中。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2011-07-16
展开全部
不行的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询