有个问题困扰了我很久,希望有高手能帮我看一下。
现在想要实现的要求是:通过Tcombobox的一个选项关联一个TListView,使得选择这个选项的时候,出来TListView提供增加,删除,修改下拉列表的功能。还有就是TListView提供CheckBox选项,可以让用户多选,多选之后点TListView的退出回到Tcombobox页面时返回选择的项,在Tcombobox的输入框中显示。比如TListView中有1,2,3 三个选项,我全都打上勾之后退出返回TCombobox页面的时候,TCombobox的输入框中就显示1,2,3.现在其它功能都实现了,就是TCombobox的输入框一直都是空的,我是在TCombobox的控件代码中直接加入TCombobox.text :=返回值的,返回值是可以正常得到的。(TCombobox的Style是csDropDown的,直接在TCombobox的输入框输入是可以的,就是通过Text直接赋值得不到)。
不知道应该怎么解决,谢谢大家了!!!

解决方案 »

  1.   

    如果你的TCombobox的Style是csDropDown 
    赋值是没问题的啊。
      

  2.   

    从楼主的描述"通过Tcombobox的一个选项关联一个TListView,使得选择这个选项的时候"看,应该这个功能是在ComboBox的OnSelect事件中写的,这种情况下的确不能直接为Combobox赋值,因为这个事件发生后,Combobox会把用户所选择的项写到ComboBox的Text中去,所以在OnSelect事件中对ComboBox的赋值是无效的,准确的说是你所赋的值立刻会被覆盖。如果要达到楼主的要求,我现在也没想到什么直接的办法,但有一个拐弯的办法如下:
    设置一个Timer,将Timer的Interval属性设置为200,即过0.2秒后发生。(Timer用来将ListView的返回结果延迟写到ComboBox的Text中去)
    定义一个String类型的变量ResultStr,用来记录ListView的返回结果
    在ComboBox的OnSelect事件中这样写:procedure TForm1.ComboBox1Select(Sender: TObject);
    Begin
      //这里将ListView显示,并记录返回结果,将结果赋值到ResultStr
      Timer1.Enable:=True;//启动计时器
    End;Procedure TForm1.Timer1Timer(Sender:TObject)
    begin
      ComboBox1.Text:=ResultStr;//
      Timer1.Enable:=False;//停止计时,只需要写一次即可。
    end;
      

  3.   

    想了想,好像还有些问题,在这短短的200毫秒内,用户还可能操作Combobox,为了防止这种情况,可对代码做些改动:procedure TForm1.ComboBox1Select(Sender: TObject);
    Begin
      //这里将ListView显示,并记录返回结果,将结果赋值到ResultStr
      ComboBox1.Enabled:=False;//暂时禁止用户操作
      timer1.Enabled:=True;
    End;Procedure TForm1.Timer1Timer(Sender:TObject)
    begin
      ComboBox1.Text:=ResultStr;
      ComboBox1.Enabled:=True;  //允许用户操作
      Timer1.Enable:=False;//停止计时,只需要写一次即可。
    end;
      

  4.   


    我的意思你是理解了,但是我的代码是要在combobox的代码里加的,combobox里貌似加了Timer会出错。
      

  5.   

    我现在是修改combobox,   不是使用combobox,   使用combobox的时候用text赋值是没有问题的,但是在空间代码里赋值就会有问题了。我现在是要做一个MyCombobox,继承combobox,增加一些新功能。