如何将字符串转换为序数类型?(想通过控件name来组合成为序数常量从资源文件中获取文本) ( 积分: 100 )

  • 主题发起人 RedSpider
  • 开始时间
R

RedSpider

Unregistered / Unconfirmed
GUEST, unregistred user!
问题如题,即我在资源文件中定义了
StringTable
begin
1,"book"
2,"apple"
end

在Delphi中定义了
const Des_Book = 1;
const Des_Apple = 2;

界面上有两个按钮,其name分别为Book和Apple

我的设想是能否根据Button的Name组合来获取资源文件中的内容。例如我按Book Button时,先'Des_'+name,就是Des_Book,然后根据Des_Book去获取资源文件中的信息。
但是这两个一个是String,一个是Integer,如何统一?

小弟最近碰正在处理一个小软件,该软件中有一个ListView,可以读取格式化的文本文件,读入为列表,另外对列表中的每个Item,都会在资源文件中有一段说明,如果我的问题可以解决的话,就只需要根据Item.caption转换为序数值就可以读取资源文件了(例如Book=1,Apple =2等)。
而目前我似乎只能在ListView的SelectItem事件中写上长长的Case语句。而且如果格式化文件记录数有增减,我还得修改代码增加判断。很麻烦。

请各位大侠不吝赐教。多谢
 
问题如题,即我在资源文件中定义了
StringTable
begin
1,"book"
2,"apple"
end

在Delphi中定义了
const Des_Book = 1;
const Des_Apple = 2;

界面上有两个按钮,其name分别为Book和Apple

我的设想是能否根据Button的Name组合来获取资源文件中的内容。例如我按Book Button时,先'Des_'+name,就是Des_Book,然后根据Des_Book去获取资源文件中的信息。
但是这两个一个是String,一个是Integer,如何统一?

小弟最近碰正在处理一个小软件,该软件中有一个ListView,可以读取格式化的文本文件,读入为列表,另外对列表中的每个Item,都会在资源文件中有一段说明,如果我的问题可以解决的话,就只需要根据Item.caption转换为序数值就可以读取资源文件了(例如Book=1,Apple =2等)。
而目前我似乎只能在ListView的SelectItem事件中写上长长的Case语句。而且如果格式化文件记录数有增减,我还得修改代码增加判断。很麻烦。

请各位大侠不吝赐教。多谢
 
可以试着用tstringlist之类的东西
tmplist:Tstringlist;
....
tmplist:=tstringlist.create;
tmplist.clear;
tmplist.add('book');
tmplist.add('apple');
用的时候
tmplist.indexof('book')得到itemindex 0
....
释放freeandnil(tmplist)
想省事可以在窗体上放一个隐藏的combobox,然后把东西加在里面
你上面的两个问题应该都能解决
 
确实是个好办法,豁然开朗啊。多谢了。

不过不知道还有没有更进一步的方式。
因为这里面返回的itemindex取决于TStringList.Add的顺序。而事实上我就是想回避在程序代码中硬性控制这个顺序。
例如:
定义的常量为
apple = 1
desk = 2
chair = 3
tv = 4
computer = 5

而我在读取这个格式文件的时候,记录的顺序可能是乱的(比如desk,tv,chair,apple,computer),那我如何得到正确的值呢?
如果在代码中直接写的话,碰到记录文件记录增减我就又得重新编译程序了:(

另外,在VB以及.net中,是允许直接用String作为代号去获取资源文件中的文字的。我想资源文件的编译格式应该是大家都统一的,那是不是就意味着有一些途径会可以将字符串当作是变量来处理呢?(好像在编译阶段就通不过了。。。)
 
順序亂的問題,如果你把整個apple=1都加入到stringlist裡面,然後用的時候分解也可以
另外一種就是再定義一個stringlist和第一個兩個連起來用
stringlist1.add('computer');stringlist2.add('5');
stringlist1.add('desk');stringlist2.add('2');
stringlist1.add('apple');stringlist2.add('1');
stringlist1.add('tv');stringlist2.add('4');
stringlist1.add('chair');stringlist2.add('3');
應用的時候你要找apple
stringlist1.indexof('apple')得到2,然後stringlist2[2]就得到apple對應的值
 
唔。。。
看来也只能这样了。确实是一个变通的办法。谢谢。
 

Similar threads

回复
0
查看
514
不得闲
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
顶部