一个令人不可思议的问题:(100分)

  • 主题发起人 主题发起人 dddk
  • 开始时间 开始时间
D

dddk

Unregistered / Unconfirmed
GUEST, unregistred user!
最近我编程时遇到一个令人不可思议的问题:
首先通过Listbox1的属性向Listbox1添加一个字符串'good';
procedure TForm1.ListBox1Click(Sender: TObject);
var
string1,string2:string;
begin
string1:='good';
string2:=listbox1.items.text;
if pos(string1,string2)=0 then
//pos为字符串匹配函数,等于0为string1,string2相等。
...
.....
..
end;
按理说应该相等,执行IF下面的语句,可是实际上并没有执行。
后来通过单步调试,在监视列表中监视string1,string2的变量时,
才发现此时的
string1为'good',而string2为'good'#$D#$A,在'good'后面多出了#$D#$A。
请问如何解决?
 
#$D#$A=#13#10
就是回车换行啊,有什么不可思议的?
 
同意wjiachun。
好象是用listbox1.items[0].text比较好!
 
取items.text试试
 
pos()函数等于不表示相等,而是string1不包含在string2中。
#$d#$a的问题只要直接用items 取值就可解决。
 
pos是取子串位置的函数。
if pos(string1,string2)=0 then
改成if pos(string1,string2)>0 then应该可以吧!
 
procedure TForm1.ListBox1Click(Sender: TObject);
var
string1,string2:string;
begin
string1:='good';
string2:=listbox1.items.string[0];
if pos(string1,string2)=0 then
.........

一定没错,给分吧.
 
不要直接用items.text
 
pos这个函数不好使,你可以用
if string1=string2 then
不是很简单吗?
 
1.pos()不是判断string1=string2
2.listbox.items.text为listbox中所有行字符串的合总,不是某一行.
listbox.items才是.
 
items后面有
 
listbox1.items.text;是包括回车换行的。
#$A#$D是十六进制,即#13#10,也就是 chr(13)+chr(10)
 
比如说,LISTBOX1里面的内容是运行后随机产生的,有可能这次产生5行,下次产生9行,
怎么才能实现我点击哪一行,就得到哪一行的内容,如果我用listbox1.items的话,
我不知到如何才能得到i.请各位高手指教.
 
少了BEGIN。。。END吧。
别的都没错呀。
 
if listbox1.items.Indexof(string1)<>-1 then
string1 肯定在listbox1.items中
else
...

>>比如说,LISTBOX1里面的内容是运行后随机产生的,有可能这次产生5行,下次产生9行,
>>怎么才能实现我点击哪一行,就得到哪一行的内容,如果我用listbox1.items的话,
>>我不知到如何才能得到i.请各位高手指教.

i=listbox1.items.Indexof(string1)



 
var s:string;
begin
s:=listbox1.items.string[listbox1.itemindex];
end;
不需要设置i的值,itemindex就代表选中的行.
其实,我在前面的回答也一样.
 
TListBox.Items属性是属于TStrings, 看来你对TStrings不太了解。建议察看一下Delphi
关于TStrings的帮助文件。

对两个字符串进行比较,如果考虑大小相互匹配的话,直接使用等号就可以:
if String1 = String2 then ....
如果不考虑大小写,可以使用CompareText函数:
if CompareText(String1,String2)=0 then ...
或者使用SameText函数:
if SameText(String1,String2) then ...

要想知道你现在的TListBox选择了那一行,可以通过TListBox.ItemIndex属性得到
 
同意,可以给分了?!
 
procedure TForm1.ListBox1Click(Sender: TObject);
var string1,string2:string;
begin
string1:='good';
string2:=listbox1.items[0];
if pos(string1,string2)>0 then
//pos为字符串匹配函数,等于0为string1不包含于string2,大于0表示string1包含于string2
..........
end;
 
串变量未初始化
 

Similar threads

回复
0
查看
848
不得闲
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
900
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部