我的表单上有一个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仍然显示 项目列表中的整个国家/地区定义,而不仅仅是国家/地区代码,任何内容 我的代码错了吗?
感谢。
答案 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;