1

フォームにTComboBoxコンポーネント(comboxCountry)があります。そして、これがTComboBox内のアイテムです。

アイテム1:「シンガポールSG」

アイテム2:「インドIND」

項目3:「オーストラリアAUS」などなどなど。

コンボボックスの値が変更された場合、combboxCounty.Textに、アイテムリストの文字列全体ではなく国コードのみを表示させたいと思います。たとえば、「SingaporeSG」ではなく「SG」のみを表示したい..cboxBankCategoryOnChange関数の方法は次のとおりです。

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

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

else
comboxCountry.Text := 'AUS'

正しいように見えますが、comboxCountry.Textは国コードだけでなく、国全体の定義をアイテムリストに表示するため、機能しません。私のコードに何か問題がありますか?

ありがとう。

4

2 に答える 2

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イベントをクリアします。

于 2012-06-28T16:02:11.463 に答える
2

コンボボックスの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;

ここに画像の説明を入力してください

于 2012-06-28T16:02:22.500 に答える