我如何在Delphi的ComboBox中使用项目文本的不同文本

时间:2012-06-28 15:18:26

标签: delphi

我的表单上有一个TComboBox组件(comboxCountry)。 这是TComboBox内的项目。

第1项:'新加坡SG'

项目2:'India IND'

项目3:'澳大利亚AUS'等等。

当组合框值改变时,我想要combboxCounty.Text 仅在项目列表中显示国家/地区代码而不是整个字符串。 例如,我想只显示'SG'而不是'Singapore SG'..这就是我的表现 对于cboxBankCategory OnChange函数:

if comboxCountry.ItemIndex = 0 then
comboxCountry.Text := 'SG'

else if comboxCountry.ItemIndex = 1 then
comboxCountry.Text := 'IND'

else
comboxCountry.Text := 'AUS'

这似乎是正确的,但它不适用于我,因为comboxCountry.Text仍然显示 项目列表中的整个国家/地区定义,而不仅仅是国家/地区代码,任何内容 我的代码错了吗?

感谢。

2 个答案:

答案 0 :(得分:2)

将组合框样式设置为csOwnerDrawFixed,并在onDrawItem事件中将其设置为:

procedure TForm1.comboxCountryDrawItem(Control: TWinControl;
  Index: Integer; Rect: TRect; State: TOwnerDrawState);
var
  s: String;
begin
  if not (odComboBoxEdit in State )then
    s := comboxCountry.Items[Index]
  else begin

if comboxCountry.ItemIndex = 0 then
s := 'SG'

else if comboxCountry.ItemIndex = 1 then
s := 'IND'

else
s := 'AUS'
  end;
  comboxCountry.Canvas.FillRect(Rect);
  comboxCountry.Canvas.TextOut(Rect.Left + 2, Rect.Top, s);

end;

并清除OnChange事件。

答案 1 :(得分:2)

使用Combobox的OwnerDrawFixed样式,您可以使用OnDrawItem事件。简短的例子。请注意,ComboBox.Text属性未更改 - 此方法仅更改其外观。

Singapore SG
India IND
Australia AUS

procedure TForm1.ComboBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
var
  s: string;
begin
  s := ComboBox1.Items[Index];
  if odComboBoxEdit in State then
    Delete(s, 1, Pos(' ', s));  //make your own job with string
  with (Control as TComboBox).Canvas do begin
    FillRect(Rect);
    TextOut(Rect.Left + 2, Rect.Top + 2, s);
   end;
end;

enter image description here