我有这么个问题combobox控件的属性为默认。items为a 1000
b 2000
c 3000我要用户在选择下拉列表选择后,显示出来的只是a或b或c,不带数字。这是我的代码
procedure TForm1.ComboBox1Select(Sender: TObject);
var
  tmpstr:string;
  ch_index:integer;
begin
  tmpstr:=combobox1.Items.Strings[combobox1.itemIndex];
  //showmessage(tmpstr)='a 1000'
  ch_index:=pos(' ',tmpstr);
  //showmessage(copy(tmpstr,0,ch_index-1))='a'
  if ch_index>0 then
    combobox1.Text:=copy(tmpstr,0,ch_index-1);//这句有问题
end;但结果不行,它显示出了完整结果(a 1000)。另外,要怎么做才能让'a'左对齐,'1000'右对齐?麻烦大家了。

解决方案 »

  1.   

    你多家些空格不就行了,另外把style改成dropdownlist
      

  2.   

    空格?我怎么知道要加多少个?实际的文字字数,系统的分辨率都会影响到右对齐的效果。
    把style改为dropdownlist后,用户就不能自己添加项目了,这不是我的目的。
      

  3.   

    楼主,不是那句有问题不信你可以试一下下面的代码
    var
      tmpstr:string;
      ch_index:integer;
    begin
      tmpstr:=combobox1.Items.Strings[combobox1.itemIndex];
      //showmessage(tmpstr)='a 1000'
      ch_index:=pos(' ',tmpstr);
      //showmessage(copy(tmpstr,0,ch_index-1))='a'
      if ch_index>0 then
      begin
        combobox1.Text:=copy(tmpstr,0,ch_index-1);
        ShowMessage(copy(tmpstr,0,ch_index-1));//显示是正确的
      end;
    end;我没有去看代码,不过我想可能是ComboBox在选择的时候,是直接通过设置
    Index的值来显示的,所以才会有那样的效果我建议楼主用AddObject的方式,也就是在每个Item上加入一个属性,即把a 1000分开
    当用户选择a时,你可以通过其Index得到1000
      

  4.   

    老兄,不是如何获得字符串的问题,问题出在ComboBox的显示方法上,你得指定它的ItemIndex。我的解决方法是,在DropDown事件中给Items添加数据。
    在selected事件中把Items清空,加入“计算”得来的新字符串,把ItemIndex=0。
    为什么要这么做,具体我不知道,我只知道无论你在ComboBox的什么事件使用类似
    ComboBox1.Items.text:='XXXX'语句都是无效的。又是我自己摆平了
    我该怎么结贴?????请原谅我再摆上几天。